📘 جزوه کامل دیکشنری‌ها (Dictionaries) در پایتون

آموزش جامع ساختار داده کلید-مقدار: تعریف، روش‌های ایجاد، دسترسی، متدهای کلیدی (get, keys, values, items, update, pop, setdefault و ...)، دیکشنری‌های تودرتو، نکات پیشرفته و تمرینات عملی | آکادمی غیاثی

📑 فهرست مطالب

🔰 دیکشنری (Dictionary) در پایتون چیست؟

در پایتون، دیکشنری یک ساختار داده بسیار قدرتمند و پرکاربرد است که داده‌ها را به صورت جفت‌های کلید-مقدار (Key-Value) ذخیره می‌کند. بر خلاف لیست یا تاپل که برای دسترسی به عناصر از اندیس عددی استفاده می‌کنیم، در دیکشنری هر مقدار با یک کلید منحصربه‌فرد قابل دسترسی است. این کلید می‌تواند از نوع داده تغییرناپذیر مانند رشته، عدد یا تاپل باشد.

💡 تشبیه ساده: دیکشنری را مانند یک دفترچه تلفن در نظر بگیرید. در این دفترچه، «نام شخص» کلید است و «شماره تلفن» مقدار مربوط به آن کلید. با دانستن نام (کلید) می‌توانید سریعاً شماره (مقدار) را پیدا کنید، بدون اینکه نیاز باشد کل دفترچه را خط به خط جستجو کنید.
⚠️ نکته مهم: در نسخه‌های قدیمی پایتون (قبل از 3.7)، دیکشنری‌ها ترتیب را حفظ نمی‌کردند. اگر به ترتیب عناصر نیاز دارید، حتماً از پایتون 3.7+ استفاده کنید یا از OrderedDict استفاده نمایید.

📦 روش‌های ایجاد دیکشنری

دیکشنری‌ها را به چند روش اصلی می‌توان ساخت:

۱. استفاده از آکولاد {}

رایج‌ترین روش: جفت‌های کلید-مقدار را درون {} قرار داده و با کاما جدا کنید. کلید و مقدار با : از هم تفکیک می‌شوند.

🐍 ایجاد دیکشنری با آکولاد
student = {
    'name': 'سارا رضایی',
    'age': 21,
    'courses': ['پایتون', 'ریاضی', 'پایگاه داده']
}
print(student)

۲. استفاده از سازنده dict()

زمانی که کلیدها رشته‌های ساده و معتبر هستند، می‌توان از dict() با آرگومان‌های کلیدی استفاده کرد.

🐍 ساخت با dict()
person = dict(name='رضا احمدی', city='تهران', is_student=True)
print(person)

۳. متد کلاسی fromkeys()

برای ساختن دیکشنری با کلیدهای مشخص و مقدار یکسان برای همه کلیدها.

🐍 fromkeys
scores = dict.fromkeys(['math', 'physics', 'chemistry'], 0)
print(scores)
💡 دیکشنری خالی را می‌توان با {} یا dict() ایجاد کرد.

🎯 دسترسی به مقادیر دیکشنری

دو روش اصلی برای دسترسی به مقدار یک کلید وجود دارد: استفاده از براکت [] و متد امن get().

🐍 دسترسی با [] و 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 و popitem
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)

⚙️ متدهای کاربردی دیکشنری

پایتون متدهای غنی برای کار با دیکشنری فراهم کرده است:

🐍 items و update
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 را برمی‌گرداند.

🏗️ دیکشنری‌های تودرتو (Nested Dictionaries)

یکی از توانمندترین ویژگی‌های دیکشنری، امکان تودرتو شدن است. می‌توانید مقادیر یک دیکشنری را خود دیکشنری‌های دیگری قرار دهید تا داده‌های پیچیده و سلسله‌مراتبی را مدل کنید.

🐍 کاربران با اطلاعات توکار
users = {
    'user1': {'name': 'علی احمدی', 'email': 'ali@example.com'},
    'user2': {'name': 'مریم رضایی', 'email': 'maryam@example.com'}
}
print(users['user1']['email'])
users['user2']['city'] = 'شیراز'
print(users['user2'])
✨ کاربرد: ذخیره اطلاعات دانشجویان، پیکربندی برنامه‌ها، پاسخ‌های API و هر جایی که داده ساختار سلسله‌مراتبی دارد.

⚖️ مقایسه دیکشنری با لیست و تاپل

درک تفاوت‌ها به انتخاب ساختار داده مناسب کمک می‌کند:

💡 قاعده کلی: اگر داده شما یک مجموعه ساده و مرتب است → لیست/تاپل. اگر نیاز به جستجوی سریع با برچسب (کلید) دارید → دیکشنری.

💡 کاربردهای مهم دیکشنری در دنیای واقعی

✍️ تمرینات عملی و پروژه کوچک

تمرین 1: دفترچه تلفن
یک دیکشنری خالی بسازید و سپس در یک حلقه ۳ بار از کاربر نام و شماره بگیرید و به دیکشنری اضافه کنید. در نهایت تمام مخاطبین را چاپ کنید.
🐾 راهنمایی
phone_book = {}
for i in range(3):
    name = input('نام: ')
    number = input('شماره: ')
    phone_book[name] = number
print(phone_book)
تمرین 2: شمارش کاراکترها
برنامه‌ای بنویسید که یک رشته از کاربر بگیرد و با استفاده از دیکشنری تعداد تکرار هر کاراکتر را محاسبه و چاپ کند.
🐍 شمارش کاراکتر
text = input('متن خود را وارد کنید: ')
counter = {}
for ch in text:
    counter[ch] = counter.get(ch, 0) + 1
print(counter)
تمرین 3: مدیریت نمرات دانشجویان
دیکشنری زیر را داشته باشید: grades = {'علی': 18, 'سارا': 19.5, 'رضا': 15}
الف) نمره سارا را چاپ کنید.
ب) دانشجوی جدیدی به نام 'مریم' با نمره 20 اضافه کنید.
ج) میانگین نمرات را محاسبه کنید.
🐍 مدیریت نمرات
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().
  • ✅ دیکشنری‌های تودرتو برای مدل‌سازی داده‌های پیچیده عالی هستند.
  • ✅ از دیکشنری برای جستجوی سریع، شمارش، ذخیره تنظیمات و کار با APIها استفاده می‌شود.
🎯 نکته پایانی: دیکشنری قلب برنامه‌نویسی در پایتون است. هر جا نیاز به ارتباط بین یک کلید (شناسه) و یک مقدار (داده) دارید، دیکشنری بهترین انتخاب است.
✅ کپی شد!