فصل ۹ · ادامهٔ مسیر

دیکشنری و شمارش فراوانی

داده‌ها را با کلید نگه دار و پرتکرارترین واژهٔ یک متن را پیدا کن.

۴۵ دقیقهٔ پیشنهادی مطالعه و تمرین۵ بخشتمرین عملی و خودآزمایی

بعد از این فصل می‌توانی…

  • تفاوت اندیس فهرست و کلید دیکشنری را بدانی.
  • با get از خطای کلید ناموجود جلوگیری کنی.
  • شمارندهٔ واژه‌ها بسازی.

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

ویدیوی این فصل

دیکشنری و شمارش فراوانی

ویدیوی این فصل هنوز اضافه نشده است. می‌توانی همین حالا آموزش متنی و تمرین‌ها را شروع کنی.

بخش 1

کلید و مقدار

دیکشنری مجموعه‌ای از جفت‌های کلید و مقدار است. در student["age"] به داده با برچسب age دسترسی داریم، نه جایگاه عددی آن. {} دیکشنری خالی می‌سازد.

در پایتون ۳ امروزی، دیکشنری ترتیب درج را حفظ می‌کند؛ اما این به معنای مرتب بودن کلیدها نیست. برای مرتب‌سازی باید صریحاً sorted را به کار ببری.

مشخصات دانش‌آموز

student = {"name": "Sara", "age": 15}
student["age"] = 16
print(student["name"])
print(student["age"])
خروجی مورد انتظار
Sara
16
بخش 2

کلید ناموجود و get

دسترسی با [] به کلیدی که وجود ندارد، KeyError می‌دهد. با key in data وجود کلید را بررسی کن؛ in در دیکشنری کلیدها را می‌سنجد، نه مقدارها را.

get(key, default) اگر کلید نباشد مقدار پیش‌فرض می‌دهد و به تنهایی کلید تازه‌ای ایجاد نمی‌کند.

امتیاز پیش‌فرض

points = {"Sara": 8}
print(points.get("Ali", 0))
print("Ali" in points)
points["Ali"] = 3
print(points["Ali"])
خروجی مورد انتظار
0
False
3
بخش 3

الگوی شمارش فراوانی

برای هر واژه یک کلید نگه دار. هر بار که آن واژه را می‌بینی، مقدار قبلی را با get(word, 0) بگیر و یک واحد اضافه کن. برای اولین مشاهده، شمارش از صفر شروع می‌شود.

شکستن متن با split کافی است تا مثال ساده کار کند. در متن واقعی، بزرگی حروف و علامت‌ها مهم‌اند؛ "Python" و "python" بدون پاک‌سازی دو کلید متفاوت‌اند.

شمارش واژه‌ها

text = "python is fun python is useful"
counts = {}
for word in text.split():
    counts[word] = counts.get(word, 0) + 1
print(counts["python"])
print(counts["fun"])
خروجی مورد انتظار
2
1
بخش 4

پیمایش کلید و مقدار

حلقهٔ مستقیم روی دیکشنری کلیدها را می‌دهد. keys()، values() و items() نماهایی از کلیدها، مقدارها و جفت‌ها می‌دهند؛ در پایتون ۳ این‌ها فهرست آماده نیستند، اما می‌توان با list تبدیلشان کرد.

در for word, count in counts.items() هر جفت بین دو متغیر باز می‌شود. این روش برای پیدا کردن بیشترین شمارش مناسب است.

بیشترین فراوانی

counts = {"python": 3, "code": 2, "learn": 1}
best_word = None
best_count = None
for word, count in counts.items():
    if best_count is None or count > best_count:
        best_word = word
        best_count = count
print(best_word, best_count)
خروجی مورد انتظار
python 3
بخش 5

ترکیب فایل، حلقه و دیکشنری

برای شمارش واژه‌های یک فایل، حلقهٔ بیرونی خط‌ها را می‌خواند و حلقهٔ درونی واژه‌های هر خط را. همان دیکشنری شمارنده باید بیرون هر دو حلقه ساخته شود تا شمارش کل فایل حفظ شود.

اگر دو واژه فراوانی برابر داشته باشند، الگوریتم بالا اولین واژهٔ دیده‌شده را نگه می‌دارد. این تصمیم را در گزارش نتیجه روشن کن.

حالا نوبت توست

نتیجهٔ رأی‌گیری

رأی‌های «blue red blue green blue red» را بشمار. تعداد رأی blue و red را در دو خط چاپ کن.

یک راهنمای کوچک

متن را split کن و برای هر رنگ شمارندهٔ جدا نگه دار.

پاسخ پیشنهادی و خروجی
votes = "blue red blue green blue red"
counts = {}
for color in votes.split():
    counts[color] = counts.get(color, 0) + 1
print(counts["blue"])
print(counts["red"])

خروجی نمونه

3
2

خودآزمایی

پاسخ را انتخاب کن و دلیل آن را بخوان. این بخش برای تمرین است و نمرهٔ رسمی ثبت نمی‌کند.

1. "name" in student چه چیزی را بررسی می‌کند؟
2. اگر x وجود نداشته باشد، data.get("x", 0) چه می‌دهد؟
دیکشنری و شمارش فراوانی | پایتون نوجوانان