آموزش جامع ساختار داده کلید-مقدار: تعریف، روشهای ایجاد، دسترسی، متدهای کلیدی (get, keys, values, items, update, pop, setdefault و ...)، دیکشنریهای تودرتو، نکات پیشرفته و تمرینات عملی | آکادمی غیاثی
در پایتون، دیکشنری یک ساختار داده بسیار قدرتمند و پرکاربرد است که دادهها را به صورت جفتهای کلید-مقدار (Key-Value) ذخیره میکند. بر خلاف لیست یا تاپل که برای دسترسی به عناصر از اندیس عددی استفاده میکنیم، در دیکشنری هر مقدار با یک کلید منحصربهفرد قابل دسترسی است. این کلید میتواند از نوع داده تغییرناپذیر مانند رشته، عدد یا تاپل باشد.
O(1) است.OrderedDict استفاده نمایید.
دیکشنریها را به چند روش اصلی میتوان ساخت:
رایجترین روش: جفتهای کلید-مقدار را درون {} قرار داده و با کاما جدا کنید. کلید و مقدار با : از هم تفکیک میشوند.
student = {
'name': 'سارا رضایی',
'age': 21,
'courses': ['پایتون', 'ریاضی', 'پایگاه داده']
}
print(student)
زمانی که کلیدها رشتههای ساده و معتبر هستند، میتوان از dict() با آرگومانهای کلیدی استفاده کرد.
person = dict(name='رضا احمدی', city='تهران', is_student=True)
print(person)
برای ساختن دیکشنری با کلیدهای مشخص و مقدار یکسان برای همه کلیدها.
scores = dict.fromkeys(['math', 'physics', 'chemistry'], 0)
print(scores)
{} یا dict() ایجاد کرد.دو روش اصلی برای دسترسی به مقدار یک کلید وجود دارد: استفاده از براکت [] و متد امن get().
student = {'name': 'سارا رضایی', 'age': 21}
print(student['name']) # سارا رضایی
print(student.get('age')) # 21
print(student.get('major', 'نامشخص')) # نامشخص (پیشفرض)
[] باعث خطای KeyError میشود، اما get() بدون خطا None یا مقدار پیشفرض شما را برمیگرداند.دیکشنری تغییرپذیر است، بنابراین میتوان به راحتی مقادیر را تغییر داد، آیتم جدید اضافه کرد یا آیتمها را حذف نمود.
student = {'name': 'سارا', 'age': 21}
student['age'] = 22 # تغییر
student['major'] = 'CS' # افزودن
print(student)
روشهای حذف:
pop(key): حذف کلید و برگرداندن مقدار آن.popitem(): حذف آخرین جفت کلید-مقدار و برگرداندن آن به صورت تاپل.del dict[key]: حذف کلید (بدون بازگشت مقدار).clear(): خالی کردن کامل دیکشنری.d = {'a': 1, 'b': 2, 'c': 3}
val = d.pop('b') # val = 2, d = {'a':1, 'c':3}
last = d.popitem() # last = ('c',3), d = {'a':1}
print(val, last, d)
پایتون متدهای غنی برای کار با دیکشنری فراهم کرده است:
keys(): بازگرداندن ویو از تمام کلیدها.values(): ویو از تمام مقادیر.items(): ویو از جفتهای (کلید، مقدار) به صورت تاپل.update(other_dict): ادغام دیکشنری دیگر (بازنویسی کلیدهای مشترک).copy(): کپی سطحی (shallow copy).setdefault(key, default): اگر کلید موجود باشد مقدارش را برگرداند، در غیر این صورت کلید را با default اضافه میکند و default را برمیگرداند.d1 = {'a': 1, 'b': 2}
d2 = {'b': 100, 'c': 3}
d1.update(d2)
print(d1) # {'a':1, 'b':100, 'c':3}
for k, v in d1.items():
print(k, v)
setdefault() بسیار کاربردی است. مثال: d.setdefault('count', 0) اگر کلید count نبود، آن را با مقدار 0 میسازد و 0 را برمیگرداند.یکی از توانمندترین ویژگیهای دیکشنری، امکان تودرتو شدن است. میتوانید مقادیر یک دیکشنری را خود دیکشنریهای دیگری قرار دهید تا دادههای پیچیده و سلسلهمراتبی را مدل کنید.
users = {
'user1': {'name': 'علی احمدی', 'email': 'ali@example.com'},
'user2': {'name': 'مریم رضایی', 'email': 'maryam@example.com'}
}
print(users['user1']['email'])
users['user2']['city'] = 'شیراز'
print(users['user2'])
درک تفاوتها به انتخاب ساختار داده مناسب کمک میکند:
phone_book = {}
for i in range(3):
name = input('نام: ')
number = input('شماره: ')
phone_book[name] = number
print(phone_book)
text = input('متن خود را وارد کنید: ')
counter = {}
for ch in text:
counter[ch] = counter.get(ch, 0) + 1
print(counter)
grades = {'علی': 18, 'سارا': 19.5, 'رضا': 15}grades = {'علی': 18, 'سارا': 19.5, 'رضا': 15}
print(grades['سارا'])
grades['مریم'] = 20
avg = sum(grades.values()) / len(grades)
print(f'میانگین: {avg:.2f}')
{} ، dict() ، fromkeys().get(key, default) و دسترسی مستقیم با dict[key].pop، popitem، del، clear.keys()، values()، items()، update()، setdefault().