آموزش پایتون - دیکشنری
در پایتون، دیکشنری (Dictionary) یک نوع دادهساختاری است که به شما اجازه میدهد تا اطلاعات را با استفاده از جفتهای کلید-مقدار (Key-Value) ذخیره و مدیریت کنید. در واقع، دیکشنری مجموعهای از عناصر است که هر عنصر شامل یک کلید و مقدار متناظر با آن کلید است. کلیدها باید یکتا و غیرقابل تغییر باشند، اما مقادیر میتوانند هر نوع دادهای (مانند اعداد، رشتهها، لیستها و حتی دیکشنریهای دیگر) باشند.
برای ایجاد یک دیکشنری در پایتون، میتوانید از آکولادهای منحصر به فرد {} استفاده کنید و جفتهای کلید-مقدار را درون آن تعریف کنید.
هر کلید با مقدار متناظر خود با دونقطه (: ) از هم جدا میشود، آیتمها با کاما (,) از هم جدا میشوند و کل مورد درون پرانتز آکولادی قرار میگیرد. یک دیکشنری خالی که هیچ آیتمی ندارد با دو پارانتز آکولادی نوشته میشود، مثل این: {}.
دسترسی به مقادیر در دیکشنری
برای دسترسی به عناصر دیکشنری، میتوانید از براکتهای مربعی همراه با نام کلید استفاده کنید تا مقدار متناظر با آن را دریافت کنید. مثال سادهای زیر را بررسی کنید:
dict = {'Name': 'Sara', 'Age': 7, 'Class': 'First'}
print "dict['Name']: ", dict['Name']
print "dict['Age']: ", dict['Age']
زمانی که کد بالا اجرا میشود، نتیجه زیر را تولید میکند:
dict['Name']: Sara
dict['Age']: 7
اگر بخواهیم به مقدار یک کلیدی دسترسی پیدا کنیم که در دیکشنری موجود نیست و قبلا تعریف نشده است ، خطایی به شرح زیر دریافت می کنیم:
dict = {'Name': 'Sara', 'Age': 7, 'Class': 'First'}
print "dict['Alice']: ", dict['Alice']
زمانی که کد بالا اجرا میشود، نتیجه زیر را تولید میکند:
dict['Alice']:
Traceback (most recent call last):
File "test.py", line 4, in <module>
print "dict['Alice']: ", dict['Alice'];
KeyError: 'Alice'
بهروزرسانی دیکشنری
شما میتوانید یک دیکشنری را با افزودن یک ورودی یا یک زوج کلید-مقدار جدید، اصلاح یک ورودی موجود یا حذف یک ورودی موجود بهروزرسانی کنید، همانند مثال ساده زیر:
dict = {'Name': 'Sara', 'Age': 7, 'Class': 'First'}
dict['Age'] = 8; # update existing entry
dict['School'] = "DPS School"; # Add new entry
print "dict['Age']: ", dict['Age']
print "dict['School']: ", dict['School']
زمانی که کد بالا اجرا میشود، نتیجه زیر را تولید میکند:
dict['Age']: 8
dict['School']: DPS School
حذف عناصر دیکشنری
شما میتوانید یا عناصر جداگانه دیکشنری را حذف کنید یا محتوای کلی دیکشنری را پاک کنید. همچنین میتوانید یک دیکشنری را بهصورت کلی در یک عملیات منفرد حذف کنید.
برای حذف یک دیکشنری بصورت کامل، کافیست از دستور del استفاده کنید. مثال زیر را مشاهده کنید:
dict = {'Name': 'Sara', 'Age': 7, 'Class': 'First'}
del dict['Name']; # remove entry with key 'Name'
dict.clear(); # remove all entries in dict
del dict ; # delete entire dictionary
print "dict['Age']: ", dict['Age']
print "dict['School']: ", dict['School']
این عمل نتیجه زیر را تولید میکند. توجه کنید که یک ارور برای اینکه پس از del dict دیکشنری دیگر وجود ندارد، نمایش داده میشود:
dict['Age']:
Traceback (most recent call last):
File "test.py", line 8, in <module>
print "dict['Age']: ", dict['Age'];
TypeError: 'type' object is unsubscriptable
توجه: متد del() در بخش بعدی بررسی خواهد شد.
ویژگیهای کلیدهای دیکشنری
مقادیر دیکشنری هیچ محدودیتی ندارند. آنها میتوانند هر نوع داده پایتونی دلخواهی شامل ساختمانهای داده استاندارد یا ساختارهای تعریف شده توسط کاربر باشند. اما همین موضوع برای کلیدها برقرار نیست.
دو نکته مهم درباره کلیدهای دیکشنری وجود دارد −
(اول) هر کلید نمی تواند بیش از یک بار تکرار شود. به عبارت دیگر، کلید تکراری مجاز نیست. هنگامی که کلیدهای تکراری در هنگام تعریف داده وجود داشته باشند، مقدار آخرین کلید در نظر گرفته خواهد شد و مابقی از بین می روند. به عنوان مثال −
dict = {'Name': 'Sara', 'Age': 7, 'Name': 'Manni'}
print "dict['Name']: ", dict['Name']
زمانی که کد بالا اجرا میشود، نتیجه زیر را تولید میکند:
dict['Name']: Manni
(دوم) کلیدها باید غیرقابل تغییر (immutable) باشند. به این معنی که شما میتوانید از رشتهها، اعداد یا تاپلها به عنوان کلیدهای دیکشنری استفاده کنید، اما استفاده از چنین چیزی مانند ['key'] مجاز نیست. مثال زیر را ببینید:
dict = {['Name']: 'Sara', 'Age': 7}
print "dict['Name']: ", dict['Name']
زمانی که کد بالا اجرا میشود، نتیجه زیر را تولید میکند:
Traceback (most recent call last):
File "test.py", line 3, in <module>
dict = {['Name']: 'Zara', 'Age': 7};
TypeError: unhashable type: 'list'
توابع و متدهای دیکشنری
پایتون شامل توابع دیکشنری زیر است:
ردیف | تابع با توضیحات |
---|---|
1 | cmp(dict1, dict2)
عناصر دو دیکشنری را مقایسه میکند. |
2 | len(dict)
طول کل دیکشنری را برمیگرداند. این مقدار برابر تعداد آیتمهای موجود در دیکشنری است. |
3 | str(dict)
رشتهای قابل چاپ از دیکشنری تولید میکند. |
4 | type(variable)
نوع متغیر را برمیگرداند. اگر متغیر دیکشنری باشد، نوع دیکشنری را برمیگرداند. |
پایتون شامل متدهای دیکشنری زیر است:
ردیف | روش با توضیحات |
---|---|
1 | dict.clear()
تمام عناصر دیکشنری dict را حذف میکند. |
2 | dict.copy()
یک کپی از دیکشنری dict را برمیگرداند. |
3 | dict.fromkeys()
یک دیکشنری جدید با کلیدهای موجود در seq و مقدارهایی که به value تنظیم شده است، ایجاد میکند. |
4 | dict.get(key, default=None)
برای کلید key، مقدار را برمیگرداند و در صورتی که کلید در دیکشنری وجود نداشته باشد، مقدار پیشفرض را برمیگرداند. |
5 | dict.has_key(key)
اگر کلید در دیکشنری dict وجود داشته باشد، مقدار true را برمیگرداند؛ در غیر اینصورت، false را برمیگرداند. |
6 | dict.items()
لیستی از جفتهای (کلید، مقدار) دیکشنری dict را برمیگرداند. |
7 | dict.keys()
لیستی از کلیدهای دیکشنری dict را برمیگرداند. |
8 | dict.setdefault(key, default=None)
مشابه get() است، اما در صورت عدم وجود کلید در دیکشنری، dict[key]=default را تنظیم میکند. |
9 | dict.update(dict2)
جفتهای کلید-مقدار دیکشنری dict2 را به دیکشنری dict اضافه میکند. |
10 | dict.values()
لیستی از مقادیر دیکشنری dict را برمیگرداند. |