Dictionary

یک Dictionary (دیکشنری) شامل صفر یا چند آیتم می‌باشد. هر آیتم متشکل از یک کلید (key) و یک مقدار (value) است که با دونقطه (:) از هم جدا می‌شوند. آیتم‌ها درون آکولاد قرار می‌گیرند و بین آنها ویرگول قرار می‌گیرد. برای نمایش یک دیکشنری تُهی از دو آکولاد {} استفاده می‌کنیم. کلیدها در دیکشنری یکتا هستند، اما ممکن است مقادیر یکتا نباشند.

مقادیر درون دیکشنری می‌توانند از هر نوعی باشند ولی کلیدها باید از نوع داده غیر قابل تغییر (immutable) از قبیل رشته‌ها، اعداد یا Tuple ها باشند. برای دسترسی به مقدار یک آیتم در دیکشنری، می‌توانید از براکت به همراه کلید مربوط به آن آیتم استفاده کنید. در ادامه یک مثال ساده آورده شده است:

dictionary = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

print(dictionary['Name'])

print(dictionary['Age'])
Zara
7

اگر سعی کنیم با کلیدی که درون دیکشنری وجود ندارد، به داده‌ای دسترسی پیدا کنیم، خطایی به شکل زیر رخ خواهد داد:

dictionary = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

print(dictionary['Alice'])

پس از اجرای این کد خطای زیر رخ می‌دهد:

Traceback (most recent call last):
  File "file.py", line 3, in 
    print(dict['Alice'])
KeyError: 'Alice'

برای به روز رسانی یک دیکشنری می‌توانید یک آیتم (زوج کلید: مقدار) جدید به آن اضافه کنید، یا آیتم موجود آن را تغییر دهید و یا آیتم موجودی را از دیکشنری حذف کنید. در مثال زیر آیتم با کلید ‘Age’ تغییر می‌یابد و یک آیتم جدید به دیکشنری اضافه می‌شود.

dictionary = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
dictionary['Age'] = 8
dictionary['School'] = "DPS School"

print(dictionary['Age'])
print(dictionary['School'])
8
DPS School

شما می‌توانید یک آیتم از دیکشنری را حذف کنید یا همه محتوای دیکشنری را پاک کنید. همچنین می‌توانید کل دیکشنری را با یک دستور حذف کنید. برای حذف صریح دیکشنری می‌توانید از دستور del استفاده کنید.

dictionary = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

del dictionary['Name']

dictionary.clear()

del dictionary

print(dictionary['Age'])
print(dictionary['School'])

خروجی این کد به شکل زیر است.

Traceback (most recent call last):
  File "file.py", line 9, in 
    print(dictionary['Age'])
NameError: name 'dictionary' is not defined

نکته: به خاطر اینکه پس از دستور del dictionary دیکشنری dictionary دیگر وجود ندارد، در اجرای دستور بعدی یک استثناء رخ می‌دهد. برای مقادیر (value) هر آیتم درون دیشکنری محدودیتی وجود ندارد. آن‌ها می‌توانند هر شی دلخواه پایتون باشند. این اشیا می‌توانند اشیای استاندارد پایتون و یا اشیایی که به وسیله تعریف شده به وسیله کاربر باشند. اما در مورد کلیدها این مسئله صدق نمی‌کند. دو نکته مهم درباره کلیدها وجود دارد که باید همواره به آنها توجه کنید:

1- به ازای هر کلید تنها یک مقدار مجاز است. این موضوع بدین معنا است که دو کلید تکراری درون دیکشنری نمی‌توانند وجود داشته باشند. در زمانی که با یک کلید چند انتساب صورت پذیرد، آخرین انتساب پیروز خواهد شد. مثال:

dictionary = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'}

print(dictionary['Name'])
Manni

2- کلیدها باید از نوع داده‌های غیر قابل تغییر باشند. بنابراین شما می‌توانید از رشته‌ها، اعداد یا چندتایی‌ها به عنوان کلید در دیکشنری استفاده کنید اما نمی‌توانید به عنوان مثال از لیست [‘key’] استفاده نمایید.

dictionary = {['Name']: 'Zara', 'Age': 7}

print(dictionary['Name'])

خروجی کد:

Traceback (most recent call last):
File "file.py", line 3, in <module>
dict = {['Name']: 'Zara', 'Age': 7};
TypeError: list objects are unhashable

توابع زیر برای کار بر روی دیکشنری‌ها در پایتون وجود دارد:

تابع شرح
cmp(dict1, dict2) اعضای دو دیکشنری را مقایسه می‌کند.
len(dict) تعداد اعضای دیکشنری (آیتم‌های درون آن) را مشخص می‌کند.
str(dict) دیکشنری و محتوای آن را به صورت یک رشته بر می‌گرداند.
type(variable) نوع variable ارسالی را بر می‌گرداند. اگر variable از نوع دیکشنری باشد، نوع دیکشنری (class ‘dict’) را بر می‌گرداند.

شی دیکشنری در پایتون دارای توابع زیر است:

تابع شرح
()dict.clear تمام آیتم‌های دیکشنری dict را حذف می‌کند.
()dict.copy کپی سطحی (shadow copy) از دیکشنری dict را بر می‌گرداند.
dict.fromkeys(seq [,value]) یک دیکشنری جدید با کلیدهای seq و مقادیر value ایجاد می‌کند.
dict.get(key, default=None) مقدار مربوط به کلید key را بر می‌گرداند. در صورت عدم وجود کلید مقدار default را.
dict.has_key(key) اگر key به عنوان کلید در دیکشنری dict وجود داشته باشد، مقدار true در غیر این صورت مقدار false را بر می‌گرداند.
()dict.items لیستی شامل چندتایی‌های (key, value) از آیتم‌های درون دیکشنری را بر می‌گرداند.
()dict.keys لیستی از کلیدهای دیکشنری dict را بر می‌گرداند.
dict.setdefault(key, default=None) مشابه get() است. اما اگر کلید key در دیکشنری وجود نداشته باشد، انتساب dict[key]=default را انجام می‌دهد.
dict.update(dict2) آیتم‌های دیکشنری dict2 را به دیکشنری dict اضافه می‌کند.
()dict.values لیستی از مقادیر درون دیکشنری dict را بر می‌گرداند.