פייתון/פייתון גרסה 2/מילונים
מילון הוא מבנה נתונים הממפה מפתחות (keys) לערכים (values) ביעילות ובנוחות.
מהו מילון?
[עריכה]לעתים רוצים למפות מפתחות לערכים. לדוגמה, אם יש לנו קבוצת תלמידים אשר נבחנו במבחן, ייתכן שנרצה למפות כל שם תלמיד לציון שקיבל במבחן. במילון זה, המפתחות הם שמות התלמידים, והערכים הם הציונים. מילון הוא מבנה נתונים פייתוני המאפשר לעשות דברים כאלה ביעילות ובנוחות. במילון פייתוני, הן המפתחות והן הערכים הם עצמים. קוראים הבקיאים בנושא המערך יכולים לדמות את המילון כמבנה כמו מערך, שבו ה"אינדקס" לא חייב להיות מספר, וטיפוס הנתונים של כל איבר במערך לא חייב להיות זהה.
כדאי לדעת: בספרות המקצועית, לעתים נקרא מילון (dictionary בלעז) בשם מערך אסוציאטיבי (associative array בלעז). הוא ממומש בפייתון באמצעות טבלת ערבול. |
הגדרת מילון
[עריכה]מבנה
[עריכה]מגדירים מילון בצורה:
d={}
כאשר items הם האיברים במילון. כל איבר הוא בצורה:
<key>:<value>
כאשר key הוא המפתח, וvalue הוא ערכו.
דוגמה
[עריכה]>>> {'foo':80, 'bar':90}
בונה מילון שבו 'foo' ממופה ל80, ו'bar' ממופה ל90. כמו כן:
>>> grades = {'foo':80, 'bar':90}
בונה מילון שבו 'foo' ממופה ל80, ו'bar' ממופה ל90, ומקשרת את השם grades למילון.
אפשר גם לבנות מילון ריק:
>>> grades = {}
בונה מילון ריק, ומשייכת את השם grades למילון.
גישה לאיבר
[עריכה]ניגשים לאיבר במילון בצורה:
<dct>[<key>]
כאשר dct הוא מילון (או שם של מילון), וkey הוא מפתח שנמצא במילון. תוצאת הביטוי הוא הערך שkey ממופה אליו במילון.
לדוגמה:
>>> grades = {'foo':80, 'bar':90}
>>> grades['foo']
80
יש להיזהר לגשת רק לאיברים שמפתחותיהם נמצאים במילון. הקוד הבא הוא שגיאה, לדוגמה:
>>> grades = {'foo':80, 'bar':90}
>>> grades['yaakov']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'yaakov'
כדי למנוע שגיאות מעין זו, השפה מאפשרת לנו לבדוק האם מפתח נמצא במילון. עושים זאת בצורה הבאה:
<key> in <dct>
כאשר key הוא מפתח וdct הוא מילון (או שם מקושר למילון). זהו ביטוי בוליאני שערכו מציין האם המפתח במילון.
לדוגמה:
>>> grades = {'foo':80, 'bar':90}
>>> 'yaakov' in grades
False
הוספת איבר
[עריכה]ניגשים לאיבר בצורה:
<dct>[<key>] = <val>
כאשר dct הוא מילון (או שם מקושר למילון), key הוא מפתח, וval הוא ערך. פקודה זו תקבע שערכו של key הוא val במילון grades. אם אין מפתח כזה במילון, הפקודה תוסיף אותו אליו. לדוגמה:
>>> grades['moshe'] = 50
תקבע שערכו של 'moshe' הוא 50 במילון grades. להלן דוגמה מלאה יותר:
>>> grades = {'foo':80, 'bar':90}
>>> grades
{'foo': 80, 'bar': 90}
>>> grades['moshe'] = 50
>>> grades
{'foo': 80, 'bar': 90, 'moshe': 50}
מחיקת איבר
[עריכה]מוחקים איבר בצורה:
del <dct>[<key>]
כאשר dct הוא מילון (או שם מקושר למילון), וkey הוא מפתח במילון. לדוגמה:
>>> del grades['moshe']
ימחק את המפתח 'moshe' מהמילון grades. להלן דוגמה מלאה יותר:
>>> grades = {'foo':80, 'bar':90}
>>> grades
{'foo': 80, 'bar': 90}
>>> grades['moshe'] = 50
>>> grades
{'foo': 80, 'bar': 90, 'moshe': 50}
>>> del grades['moshe']
>>> grades
{'foo': 80, 'bar': 90}
>>> 'moshe' in grades
False
מעבר על מפתחות וערכים
[עריכה]מעבר על מפתחות
[עריכה]אפשר להשתמש בלולאת for כדי לעבור על כל המפתחות במילון לפי הצורה:
for <var> in <dct>:
<action>
כאשר var הוא שם (שיקושר לכל אחד ממפתחות המילון), dct הוא מילון (או שם מקושר למילון), וaction היא פעולה (או בלוק). לדוגמה:
grades = {'foo': 80, 'bar': 90}
for name in grades:
print name
תדפיס את שני המפתחות שבמילון:
foo
bar
שימו לב: נשים לב שהשפה אינה אומרת דבר לגבי סדר האיברים בלולאה. אין לכתוב קוד שמניח שסדר האיברים בלולאה פועל לפי חוקיות כלשהי (לדוגמה, בסדר אלפבתי). |
מעבר על איברים
[עריכה]לפעמים רוצים לעבור בלולאה על כל איברי מילון, הן המפתחות והן הערכים.
היות שכבר ראינו שאפשר לעבור בלולאה על כל מפתחות מילון, אז מן הסתם אפשר להשתמש בכך גם לכך. הקוד הבא, לדוגמה, מדפיס כל שם והציון שאליו הוא ממופה:
grades = {'foo': 80, 'bar': 90}
for name in grades:
print 'The grade of ' + name + ' is ' + str(grades[name])
עם זאת, הקוד נחשב לא-פייתוני (הוא נחשב לא אסתטי, ובנוסף גם ידוע כלא יעיל). נוכל להשתמש בלולאה על זוגות, ולעשות זאת כך:
grades = {'foo': 80, 'bar': 90}
for (name, grade) in grades.items():
print 'The grade of ' + name + ' is ' + str(grade)
נשים לב שכדי לקבל רשימת זוגות של כל איברי מילון, אפשר לרשום:
<dct>.items()
כאשר dct הוא מילון (או שם מקושר למילון).
תקציר פונקציות מילונים
[עריכה]פונקציות פנימיות
[עריכה]dict.keys()
- מחזיר את רשימת המפתחות.dict.has_key(key_name)
- מחזיר אמת אם key_name נמצא במילון.dict.get(key_name,def_ret_val)
מחזיר את הערך של המפתח key_name, ואם הוא לא קיים במילון, מחזיר את def_ret_val.dict.items()
מחזיר רשימה של זוגות של (מפתח,ערך) בתצורה של n-יות.dict.update(other_dict)
- משלב את האיברים של other_dict ב-dict.
פונקציות חיצוניות
[עריכה]del dict[key_name]
len(dict)
- מחזיר את מספר האיברים ב-dict.
- | מילונים | - |