2.9. מילונים

מילון הוא מיפוי מ-מפתחות ל-ערכים. כל מפתח נבדק ישירות; המילון זוכר איזה ערך שויך לאחרונה לאותו מפתח.

2.9.1. יצירת מילונים

השתמשו בסוגריים מסולסלים עם זוגות key: value, או ב-constructor dict:

empty   = {}
person  = {"name": "OpenMV", "id": 42}
counts  = dict(a=1, b=2, c=3)            # keyword form
pairs   = dict([("x", 1), ("y", 2)])     # from a list of pairs

הערכים יכולים להיות מכל סוג – מחרוזות, מספרים, רשימות, ואפילו מילונים אחרים:

config = {
    "name":  "OpenMV",
    "id":    42,
    "width": 320,
    "tags":  ["red", "round"],
}
A dictionary shown as two columns: keys on the left, values on the right, with arrows linking each pair.

כל מפתח במילון ממופה לערך אחד בדיוק.

2.9.2. גישה וחברות

אינדוקס באמצעות [] מאחזר את הערך עבור מפתח. מפתח חסר גורם ל-KeyError:

>>> person = {"name": "OpenMV", "id": 42}
>>> person["name"]
'OpenMV'
>>> person["missing"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'missing'

לחיפוש סלחני יותר, השתמשו ב-dict.get(). היא מחזירה None עבור מפתח חסר, או ערך שתעבירו כארגומנט השני:

>>> person.get("name")
'OpenMV'
>>> person.get("missing")            # returns None
>>> person.get("missing", "n/a")
'n/a'

מילת המפתח in בודקת חברות של מפתח – לא של ערך:

>>> "name" in person
True
>>> "OpenMV" in person
False

2.9.3. הוספה, עדכון והסרה

השמה ל-d[key] מוסיפה את הערך אם המפתח חדש, ודורסת אותו אם הוא כבר קיים:

>>> person["seen"] = 1
>>> person["seen"] = 2               # overwrites
>>> person
{'name': 'OpenMV', 'id': 42, 'seen': 2}

להסרה יש כמה צורות:

  • del d[key] – מסיר ערך; גורם ל-KeyError אם המפתח חסר.

  • dict.pop() – מסיר ומחזיר את הערך; ברירת מחדל אופציונלית מאפשרת להימנע מהחריגה.

  • dict.clear() – מסיר כל ערך.

dict.update() ממזג מילון אחר (או רשימה של זוגות (key, value)) לתוך המקבל, ודורס כל מפתח תואם:

>>> person.update({"id": 100, "owner": "alice"})
>>> person
{'name': 'OpenMV', 'id': 100, 'seen': 2, 'owner': 'alice'}

2.9.4. איטרציה

איטרציה ישירה על מילון מניבה את מפתחותיו, לפי סדר ההכנסה:

for k in person:
    print(k)

שלושה תצוגות מספקות גישה מפורשת:

  • dict.keys() – המפתחות (זהה לאיטרציה על המילון).

  • dict.values() – הערכים.

  • dict.items() – טאפלים של (key, value), מושלמים לפריקה בתוך לולאה.

for key, value in person.items():
    print(key, "=", value)

2.9.5. מה יכול להיות מפתח

מפתחות מילון חייבים להיות ניתנים לגיבוב (hashable) – ערכם אינו יכול להשתנות לאורך חייהם. סוגים נפוצים הניתנים לגיבוב הם:

סוגים בני שינוי כמו list, dict ו-bytearray אינם יכולים לשמש כמפתחות; שימוש באחד מהם גורם ל-TypeError. טאפלים של ערכים בלתי משתנים הם הדרך הסטנדרטית לאינדוקס מילון לפי מזהה מורכב כגון קואורדינטה דו-ממדית ברשת:

>>> grid = {}
>>> grid[(0, 0)] = "start"
>>> grid[(5, 7)] = "end"

2.9.6. אורך

len() מחזירה את מספר הערכים:

>>> len(person)
4