دیکشنری در پایتون (Dictionary)

دیکشنری یکی از پرکاربردترین ساختارهای داده در پایتونه. به جای ذخیره مقادیر با ایندکس عددی، در دیکشنری هر مقدار یک کلید (Key) دلخواه داره. فکر کن مثل یه دفترچه تلفن: اسم شخص → شماره تلفن. در این جلسه قدم به قدم و با ۳ مثال کامل یادش می‌گیریم.

📺 برای تماشا در یوتیوب: باز کردن در یوتیوب ↗
🎥 برای تماشا در آپارات: باز کردن در آپارات ↗

دیکشنری چیست؟

دیکشنری یا dict مجموعه‌ای از جفت‌های کلید: مقدار است. هر کلید مثل یک برچسب عمل می‌کند که مقدار مشخصی پشتش قرار دارد.

  • کلیدها یکتا هستند — نمی‌توان دو کلید یکسان داشت
  • مقادیر می‌توانند هر نوعی باشند — عدد، رشته، لیست، حتی دیکشنری دیگر
  • ترتیب حفظ می‌شود — از پایتون ۳.۷ به بعد
  • تغییرپذیر هستند — می‌توان اضافه، حذف و ویرایش کرد
💡
تشبیه ساده: دیکشنری مثل یک دفترچه تلفن است. به جای اینکه بگویی «نفر سوم»، می‌گویی «شماره علی» و مستقیم جواب می‌گیری.

مثال اول — ساخت و دسترسی به دیکشنری

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

Python
# ساخت یک دیکشنری برای اطلاعات یک دانش‌آموز
student = {
    "name": "علی رضایی",
    "age": 20,
    "grade": 17.5,
    "passed": True
}

# دسترسی با کلید — داخل کروشه
print(student["name"])    # علی رضایی
print(student["grade"])   # 17.5

# دسترسی با .get() — اگه کلید نباشد None برمی‌گرداند
print(student.get("email"))            # None
print(student.get("email", "ندارد"))  # ندارد

# تعداد کلیدها
print(len(student))  # 4
⚠️
تفاوت [] و .get(): اگر کلید وجود نداشته باشد، student["email"] خطای KeyError می‌دهد. اما student.get("email") بدون خطا None برمی‌گرداند. در کدهای واقعی بیشتر از .get() استفاده کن.

مثال دوم — اضافه کردن، ویرایش و حذف

دیکشنری تغییرپذیر است. می‌توانی بعد از ساخت، مقادیر جدید اضافه کنی، موجودی‌ها را ویرایش کنی یا کلیدی را حذف کنی.

Python
product = {
    "name": "لپ‌تاپ",
    "price": 35_000_000,
    "stock": 10
}

# اضافه کردن کلید جدید
product["brand"] = "Asus"
print(product)

# ویرایش مقدار موجود
product["price"] = 32_000_000   # تخفیف
product["stock"] -= 1            # یکی فروخته شد

# حذف یک کلید با del
del product["brand"]

# حذف و گرفتن مقدار با pop()
old_price = product.pop("price")
print("قیمت قبلی:", old_price)  # 32000000
print(product)

# بررسی وجود کلید
print("name" in product)   # True
print("price" in product)  # False — حذف شد

مثال سوم — حلقه زدن و متدهای مهم

یکی از کارهای خیلی رایج، حلقه زدن روی دیکشنری برای پردازش تمام داده‌هاست. سه راه اصلی داریم:

Python
scores = {
    "علی": 18,
    "سارا": 20,
    "رضا": 15,
    "مینا": 19
}

# ۱. فقط کلیدها
for name in scores.keys():
    print(name)

# ۲. فقط مقادیر
for score in scores.values():
    print(score)

# ۳. هر دو با هم — رایج‌ترین روش
for name, score in scores.items():
    print(f"{name}: {score}")

# پیدا کردن بالاترین نمره
best = max(scores, key=scores.get)
print(f"نفر اول: {best} با نمره {scores[best]}")
# نفر اول: سارا با نمره 20
💡
نکته: در اکثر موارد واقعی از .items() استفاده می‌کنی چون هم کلید هم مقدار لازم داری. این الگو را حفظ کن — خیلی به‌کارت می‌آید.

دیکشنری تودرتو (Nested Dictionary)

مقدار یک کلید می‌تواند خودش یک دیکشنری دیگر باشد. این برای نگه‌داری اطلاعات پیچیده‌تر خیلی مفید است:

Python
users = {
    "u001": {
        "name": "علی",
        "age": 25,
        "city": "تهران"
    },
    "u002": {
        "name": "سارا",
        "age": 30,
        "city": "اصفهان"
    }
}

# دسترسی به داده‌های تودرتو
print(users["u001"]["name"])  # علی
print(users["u002"]["city"])  # اصفهان

# نمایش همه کاربران
for user_id, info in users.items():
    print(f"{user_id}: {info['name']} از {info['city']}")
کاربرد واقعی: وقتی از API داده دریافت می‌کنی (مثل اطلاعات کاربر از سرور)، معمولاً به شکل یک دیکشنری تودرتو می‌آید. یادگیری این الگو در کار با API‌ها ضروری است.

جدول متدهای مهم

یک مرور سریع از متدهایی که بیشتر استفاده می‌کنی:

Python
d = {"a": 1, "b": 2}

d.get("a")           # 1  — دسترسی امن
d.keys()            # dict_keys(['a', 'b'])
d.values()          # dict_values([1, 2])
d.items()           # dict_items([('a',1),('b',2)])
d.pop("a")          # 1  — حذف و برگرداندن
d.update({"c": 3})  # اضافه کردن دسته‌جمعی
d.clear()           # خالی کردن کامل
len(d)              # تعداد کلیدها
"b" in d            # True — بررسی وجود کلید
تمرین ۱

یک دیکشنری برای اطلاعات خودت بساز با کلیدهای name، age، city و job. سپس اطلاعات را با یک حلقه for و .items() به صورت زیبا چاپ کن.

راهنمایی 💡
me = {
    "name": "اسم تو",
    "age": 25,
    "city": "شهر تو",
    "job": "دانشجو"
}
for key, value in me.items():
    print(f"{key}: {value}")
تمرین ۲

یک دیکشنری از نام و نمره ۵ دانش‌آموز بساز. سپس برنامه‌ای بنویس که: الف) میانگین نمرات را محاسبه کند. ب) نام دانش‌آموزانی که نمره‌شان بالای ۱۵ است را چاپ کند.

راهنمایی 💡
scores = {"علی": 18, "سارا": 14, "رضا": 20, "مینا": 12, "حسن": 16}

avg = sum(scores.values()) / len(scores)
print(f"میانگین: {avg}")

for name, score in scores.items():
    if score > 15:
        print(name)
تمرین ۳
چالشی

یک رشته از کاربر بگیر و تعداد تکرار هر حرف را با دیکشنری بشمار و چاپ کن. مثلاً برای "hello" جواب باید h:1, e:1, l:2, o:1 باشد.

راهنمایی 💡
text = input("یک کلمه وارد کن: ")
counter = {}

for char in text:
    counter[char] = counter.get(char, 0) + 1

for char, count in counter.items():
    print(f"{char}: {count}")