۶

دیکشنری و مجموعه 📚

یاد می‌گیریم چطور داده‌ها رو با کلید ذخیره کنیم!

دیکشنری‌ها (Dictionaries)

دیکشنری‌ها mutable هستند و داده‌ها رو به صورت جفت کلید-مقدار ذخیره می‌کنن:

ایجاد و دسترسی به دیکشنری
# ایجاد دیکشنری
student = {
    "name": "علی",
    "age": 20,
    "major": "کامپیوتر",
    "gpa": 18.5
}

# دسترسی به مقادیر
print(student["name"])  # علی
print(student["age"])   # 20

# استفاده از get برای جلوگیری از خطا
print(student.get("phone", "موجود نیست"))  # موجود نیست

# اضافه کردن یا تغییر مقدار
student["phone"] = "09123456789"
student["age"] = 21

# حذف کردن
del student["gpa"]
phone = student.pop("phone")

# گرفتن کلیدها و مقادیر
print(student.keys())    # dict_keys(['name', 'age', 'major'])
print(student.values())  # dict_values(['علی', 21, 'کامپیوتر'])
print(student.items())   # dict_items([('name', 'علی'), ('age', 21), ('major', 'کامپیوتر')])

پیمایش دیکشنری

روش‌های مختلفی برای پیمایش دیکشنری وجود داره:

پیمایش دیکشنری
person = {"name": "سارا", "age": 25, "city": "تهران"}

# پیمایش کلیدها
for key in person:
    print(key, ":", person[key])

# پیمایش مستقیم کلیدها
for key in person.keys():
    print(key)

# پیمایش مقادیر
for value in person.values():
    print(value)

# پیمایش همزمان کلید و مقدار
for key, value in person.items():
    print(f"{key}: {value}")

مجموعه‌ها (Sets)

مجموعه‌ها mutable هستند و فقط مقادیر یکتا رو ذخیره می‌کنن:

کار با مجموعه‌ها
# ایجاد مجموعه
fruits = {"سیب", "موز", "پرتقال"}
numbers = {1, 2, 3, 4, 5}

# اضافه کردن
fruits.add("انگور")
fruits.add("سیب")  # اضافه نمی‌شود چون تکراری است

# حذف کردن
fruits.remove("موز")
fruits.discard("هلو")  # اگر وجود نداشته باشد خطا نمی‌دهد

# عملیات مجموعه‌ای
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}

print(set1 | set2)   # اجتماع: {1, 2, 3, 4, 5, 6}
print(set1 & set2)   # اشتراک: {3, 4}
print(set1 - set2)   # تفاضل: {1, 2}
print(set1 ^ set2)   # تفاضل متقارن: {1, 2, 5, 6}

دیکشنری‌های تو در تو

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

دیکشنری‌های تو در تو
# دیکشنری تو در تو برای اطلاعات دانشجویان
students = {
    "student1": {
        "name": "علی",
        "age": 20,
        "grades": [18, 19, 17]
    },
    "student2": {
        "name": "سارا", 
        "age": 21,
        "grades": [19, 20, 18]
    }
}

# دسترسی به اطلاعات
print(students["student1"]["name"])  # علی
print(students["student2"]["grades"][0])  # 19

# اضافه کردن دانشجوی جدید
students["student3"] = {
    "name": "رضا",
    "age": 22,
    "grades": [16, 17, 18]
}

# پیمایش دیکشنری تو در تو
for student_id, info in students.items():
    print(f"دانشجو {student_id}:")
    for key, value in info.items():
        print(f"  {key}: {value}")

تمرین! 🧠

برنامه‌ای بنویس که تعداد تکرار هر کلمه در یک رشته رو بشماره و نتیجه رو در یک دیکشنری ذخیره کنه. سپس کلمه‌ای که بیشترین تکرار رو داره پیدا کنه.

جواب تمرین

text = "پایتون زبان برنامه نویسی عالی است پایتون ساده و قدرتمند است"

# تقسیم متن به کلمات
words = text.split()

# شمارش تکرار کلمات
word_count = {}
for word in words:
    if word in word_count:
        word_count[word] += 1
    else:
        word_count[word] = 1

print("تکرار کلمات:", word_count)

# پیدا کردن کلمه با بیشترین تکرار
most_common = max(word_count, key=word_count.get)
print(f"کلمه با بیشترین تکرار: '{most_common}' با {word_count[most_common]} بار")