דילוג לתוכן המרכזי
מודול 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 והלאה).

האם המפתח קיים?

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' ולאחר מכן הקצה ל-'email_or_default' את הערך של המפתח 'telefono' באמצעות .get עם ברירת המחדל 'sconosciuto'. הערך את 'email_or_default'.

טוען עורך...
הצג רמז

.get('telefono', 'sconosciuto') אינו מעלה KeyError.

הפתרון זמין לאחר 3 ניסיונות

סקירת התרגיל

פעילות גופנית#python.m3.l3.e2
ניסיונות: 0טוען...

בהינתן `מחירים = {'mela': 1.2, 'pera': 1.5, 'kiwi': 2.0}`, חשב את הסכום של כל הערכים והקצה אותו ל`סך הכל`. הערך 'סך הכל'.

טוען עורך...
הצג רמז

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 מקבלת פרמטר שני כ-fallback: user.get('role', 'guest').

הפתרון זמין לאחר 3 ניסיונות