0Pricing
Python Academy · درس

defaultdict

هيّئ قيم القاموس تلقائيًا

defaultdict درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.

مشكلة المفتاح المفقود

في dict عادي، يؤدي الوصول إلى مفتاح غير موجود إلى رفع KeyError. وهذا مزعج عندما تريد بناء القيم تدريجياً.

d = {}
try:
    d['x'].append(1)
except KeyError as e:
    print('KeyError:', e)

ظهور defaultdict

تأخذ defaultdict من collections دالة مُنشئة تنتج قيمة افتراضية لأي مفتاح مفقود. استوردها باستخدام from collections import defaultdict.

from collections import defaultdict
d = defaultdict(int)
print(d['missing'])
print(dict(d))

العدّ باستخدام int

مع defaultdict(int)، تكون القيمة الافتراضية للمفاتيح المفقودة هي 0، ولذلك يمكنك زيادة القيمة من دون التحقق أولاً.

from collections import defaultdict
counts = defaultdict(int)
for ch in 'banana':
    counts[ch] += 1
print(dict(counts))

التجميع باستخدام list

ينشئ defaultdict(list) قائمة فارغة للمفاتيح الجديدة، مما يجعله مناسباً جداً لتجميع العناصر في مجموعات.

from collections import defaultdict
groups = defaultdict(list)
words = ['apple', 'ant', 'bee', 'bear']
for w in words:
    groups[w[0]].append(w)
print(dict(groups))

التجميع باستخدام set

استخدم defaultdict(set) عندما تريد قيماً فريدة لكل مفتاح. تُحذف التكرارات تلقائياً.

from collections import defaultdict
seen = defaultdict(set)
pairs = [('a', 1), ('a', 1), ('a', 2), ('b', 3)]
for k, v in pairs:
    seen[k].add(v)
print(dict(seen))

يجب أن تكون الدالة المُنشئة قابلة للاستدعاء

يجب أن يكون الوسيط كائناً قابلاً للاستدعاء، لا يأخذ أي وسائط ويُرجع القيمة الافتراضية. تعمل int وlist وset وdict جميعاً، لأن استدعاءها يُرجع قيمة فارغة.

from collections import defaultdict
print(int())
print(list())
print(set())

قيمة افتراضية مخصصة باستخدام lambda

يمكنك توفير أي كائن قابل للاستدعاء ولا يأخذ وسائط، مثل lambda، لإرجاع قيمة افتراضية مخصصة.

from collections import defaultdict
scores = defaultdict(lambda: 100)
print(scores['new_player'])
scores['alice'] -= 10
print(dict(scores))

كائنات defaultdict متداخلة

يمكن للدالة المُنشئة نفسها إنشاء defaultdict، مما يتيح لك بناء هياكل متداخلة من دون إعداد يدوي.

from collections import defaultdict
table = defaultdict(lambda: defaultdict(int))
table['fruit']['apples'] += 3
table['fruit']['pears'] += 2
print(table['fruit']['apples'])
print(table['fruit']['pears'])

الوصول ينشئ المفتاح

انتبه: إن مجرد قراءة مفتاح مفقود تُدرجه بالقيمة الافتراضية. وبعد الوصول إليه، يصبح المفتاح موجوداً في القاموس.

from collections import defaultdict
d = defaultdict(int)
_ = d['ghost']
print('ghost' in d)
print(dict(d))

التحقق من دون إدراج

للتحقق من مفتاح من دون إنشائه، استخدم الطريقة .get() أو العامل in؛ فهما لا يستدعيان الدالة المُنشئة مطلقاً.

from collections import defaultdict
d = defaultdict(int)
print(d.get('safe', 'default'))
print('safe' in d)
print(dict(d))

التحويل مرة أخرى إلى dict

لفّ defaultdict داخل dict() عندما تريد قاموساً عادياً، مثلاً قبل إرجاعه من دالة أو طباعته بشكل منسّق.

from collections import defaultdict
dd = defaultdict(list)
dd['a'].append(1)
plain = dict(dd)
print(type(plain))
print(plain)

تحقق سريع

إلى ماذا يشير الوسيط الممرَّر إلى defaultdict؟

مراجعة: defaultdict

النقاط الأساسية:

  • ينشئ defaultdict(factory) القيم تلقائياً للمفاتيح المفقودة.
  • تعطي int القيمة 0 (للعدّ)، وتعطي list القيمة [] (للتجميع)، وتعطي set مجموعة فارغة (للتجميع الفريد).
  • يمكن أن تكون الدالة المُنشئة أي كائن قابل للاستدعاء ولا يأخذ وسائط، بما في ذلك lambda.
  • تؤدي قراءة مفتاح مفقود إلى إدراجه؛ استخدم .get() أو in للاستعلام بأمان.
from collections import defaultdict
g = defaultdict(list)
for w in ['cat', 'cow', 'dog']:
    g[w[0]].append(w)
print(dict(g))

الأسئلة الشائعة

هل درس «defaultdict» مجاني؟

نعم — نص درس «defaultdict» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.

ماذا ستتعلم في «defaultdict»؟

هيّئ قيم القاموس تلقائيًا تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟

لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «defaultdict»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟

نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. Counter
  2. defaultdict
  3. deque
  4. namedtuple وOrderedDict
← العودة إلى Python Academy