الدرس 5 من 10
التجميع بـ defaultdict
- 11 دقيقة
- 5 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
أقسام بلا KeyError
الشرح
التجميع يحوّل قائمة مسطّحة إلى أقسام: الطلاب بحسب المدينة، والطلبات بحسب العميل. والقاموس العادي يتعثّر عند أول عنصر من كل قسم: groups[city].append(name) ترمي KeyError لأن قائمة المدينة لم تُنشأ بعد.
defaultdict(list) من collections يحلّ هذا: إن طلبت مفتاحًا غائبًا أنشأ له قائمة فارغة وأعطاك إيّاها، فيصير التجميع سطرًا واحدًا داخل الحلقة. وما تمرّره إليه دالة تصنع القيمة الأولى لا القيمة نفسها: list لا [].
والفخّ: مجرّد قراءة مفتاح غائب تُنشئه. فـ if groups["أبها"]: تضيف «أبها» بقائمة فارغة وأنت تسأل فقط. للسؤال عن الوجود استعمل in أو .get().
المطلوب
جمّع students في by_city بـ defaultdict(list): مفتاحه المدينة وقيمته أسماء طلابها بترتيبهم الأصلي. ثم اطبع كل مدينة وأسماءها في سطر.
معايير التصحيح
5 معايير- الرياض: ثلاثة أسماء بترتيبها الأصلي
- جدة والدمام بأسمائهما
- ثلاث مدن بلا قسم زائد
- by_city من نوع defaultdict(list)
- طُبعت كل مدينة مع أسمائها في سطر