الانتقال إلى المحتوى الرئيسي
الوحدة 3 · الدرس 3 من 411/36 في الدورة~12 min
دروس الوحدة (3/4)

القواميس

القاموس (dict) عبارة عن خريطة مفتاح → قيمة: يمكنك ربط مفتاح (دائمًا ما تكون سلسلة) بقيمة من أي نوع. هذا هو الأساس بنية البيانات لنمذجة كيانات العالم الحقيقي.

إنشاء قاموس

Python
vuoto = {}
utente = {"nome": "Ada", "anni": 36, "attivo": True}
# costruttore alternativo
utente = dict(nome="Ada", anni=36, attivo=True)

يجب أن تكون المفاتيح قابلة للتجزئة (غير قابلة للتغيير): سلاسل، أرقام، مجموعات قابلة للتجزئة العناصر. ومن ناحية أخرى، يمكن أن تكون القيم أي شيء، وحتى إملاءات أخرى.

الوصول، التعديل، الحذف

Python
utente["nome"]            # 'Ada'
utente["email"]           # KeyError!
utente.get("email")       # None       (default sicuro)
utente.get("email", "—")  # '—'        (default custom)
utente["citta"] = "Roma"  # aggiunge / aggiorna
del utente["attivo"]      # rimuove

التكرار على الإملاء

Python
for chiave in utente:               # itera sulle CHIAVI (default)
    print(chiave, utente[chiave])

for chiave in utente.keys():        # esplicito
    ...

for valore in utente.values():
    print(valore)

for chiave, valore in utente.items():    # idiom più comune
    print(f"{chiave} = {valore}")

ترتيب التكرار هو ترتيب الإدراج (مضمون منذ إصدار Python 3.7.1). فصاعدا).

هل المفتاح موجود؟

Python
"nome" in utente     # True
"email" in utente    # False     (NON usa il valore, usa la chiave!)

setdefault: التهيئة عند الوصول لأول مرة

نمط متكرر: "إذا كان المفتاح غير موجود، ضع المفتاح الافتراضي في؛ في أي الحالة تُرجع القيمة الحالية".

Python
gruppi = {}
for nome in ["Ada", "Linus", "Ada", "Grace", "Linus", "Ada"]:
    gruppi.setdefault(nome, []).append(1)
# {'Ada': [1, 1, 1], 'Linus': [1, 1], 'Grace': [1]}

هناك أيضًا collections.Counter لحالة العد المحددة (نحن سوف نراه في وحدة stdlib).

التكرار على القواميس

يمكنك التكرار عبر القاموس بعدة طرق:

  • for k in d: تكرار التكرارات فوق المفاتيح فقط (السلوك الافتراضي).
  • for k, v in d.items(): حلقات على أزواج القيمة الرئيسية في وقت واحد (مفيد للغاية).
  • for v in d.values(): حلقات فوق القيم فقط.

جربه

تمرين#python.m3.l3.e1
المحاولات: 0جارٍ التحميل…

بالنظر إلى `user = {'nome': 'Ada', 'anni': 36}`، أضف المفتاح 'email' = 'ada@ex.com' ثم قم بتعيين قيمة المفتاح 'telefono' إلى `email_or_default' باستخدام .get مع 'sconosciuto' الافتراضي. تقييم "email_or_default".

جارٍ تحميل المحرر…
إظهار التلميح

.get('telefono', 'sconosciuto') لا يؤدي إلى ظهور KeyError.

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#python.m3.l3.e2
المحاولات: 0جارٍ التحميل…

بالنظر إلى `prices = {'mela': 1.2, 'pera': 1.5, 'kiwi': 2.0}`، قم بحساب مجموع كل القيم وعيّنه إلى `total`. تقييم "الإجمالي".

جارٍ تحميل المحرر…
إظهار التلميح

sum(prices.values()) يجمع كل القيم.

الحل متاح بعد 3 من المحاولات

التحدي الإضافي

تمرين#python.m3.l3.e3
المحاولات: 0جارٍ التحميل…

Given the dictionary `user = {'name': 'Alice'}`, use the `.get()` method to retrieve the value of the key `'role'`. If the key does not exist, make it return the default value `'guest'`. Store the result in `user_role` and evaluate it.

جارٍ تحميل المحرر…
إظهار التلميح

يقبل التابع get معلمة ثانية كبديل: user.get('role', 'guest').

الحل متاح بعد 3 من المحاولات