נסקור בקצרה כיצד בנויים מילונים (dictionaries) בשפת פייתון, וכן נלמד כמה מתודות לעבודה איתם. הקריאה לא תיקח יותר מ-5 דקות.
[מטא-דאטה של המאמר המקורי: 9 לייקים, 6 תגובות, 578 אלף פתיחות, מיליון חשיפות – ניתן להשמיט בתרגום התוכן עצמו]
מילונים והמתודות שלהם בפייתון
מהו מילון?
מילון (dictionary) הוא מבנה נתונים לא מסודר המאפשר לאחסן זוגות "מפתח-ערך" (key-value). הנה דוגמה למילון בפייתון:
dictionary = {'פרסונה': 'אדם',
'מרתון': 'מרוץ רצים באורך של כ-26 מייל',
'להתנגד': 'להישאר חזק למרות לחץ',
'לרוץ': 'לנוע במהירות'}
מילון זה משתמש במחרוזות כמפתחות, אך מפתח יכול להיות באופן עקרוני כל טיפוס נתונים בלתי ניתן לשינוי (immutable). הערך של מפתח ספציפי יכול להיות כל דבר. הנה דוגמה נוספת למילון, שבו המפתחות הם מספרים והערכים הם מחרוזות:
gender_dict = {0: 'זכר',
1: 'נקבה'}
הבהרה חשובה: אם תנסו להשתמש בטיפוס נתונים ניתן לשינוי (mutable) כמפתח, תקבלו שגיאה:
dictionary = {(1, 2.0): 'טאפלים יכולים להיות מפתחות',
1: 'מספרים שלמים יכולים להיות מפתחות',
'לרוץ': 'גם מחרוזות',
['גרב', 1, 2.0]: 'אבל רשימות לא יכולות'}
הערת המתרגם: למעשה, הבעיה אינה עם טיפוסי נתונים ניתנים לשינוי, אלא עם טיפוסי נתונים שאינם ניתנים לגיבוב (unhashable), אך בדרך כלל מדובר באותו הדבר.
קבלת נתונים ממילון
כדי לקבל ערך של מפתח ספציפי, משתמשים בסוגריים מרובעים []
. נניח שבמילון שלנו יש את הזוג 'מרתון': 26
.
# לוקחים את הערך עם המפתח "מרתון"
dictionary['מרתון']
שוב, תקבלו שגיאה אם תנסו לקבל ערך לפי מפתח שאינו קיים. כדי למנוע שגיאות כאלה, קיימות מתודות שעליהן נדבר כעת.
הוספה ועדכון מפתחות
הוספת זוגות חדשים למילון מתבצעת בפשטות:
# מוסיפים מפתח "נעל" עם הערך "סוג הנעלה, המכסה את הרגל לא מעל הקרסול"
dictionary['נעל'] = 'סוג הנעלה, המכסה את הרגל לא מעל הקרסול'
עדכון ערכים קיימים מתבצע בדיוק באותו אופן:
# מעדכנים את המפתח "נעל" ומקצים לו את הערך "נעל טובה"
dictionary['נעל'] = 'נעל טובה'
מחיקת מפתחות
כדי למחוק מפתח והערך המתאים לו מהמילון, ניתן להשתמש ב- del
:
# מוחקים את הערך עם המפתח "להתנגד" מהמילון
del dictionary['להתנגד']
מתודות
למילונים בפייתון יש מגוון רחב של מתודות שימושיות שיעזרו לכם בעבודה איתם. הנה רק כמה מהן:
update
המתודה update()
שימושית אם צריך לעדכן מספר זוגות בבת אחת. המתודה מקבלת מילון אחר כארגומנט.
# מוסיפים שני זוגות למילון dictionary באמצעות המתודה update
dictionary.update({'רץ': 'לרוץ בזמן עבר',
'נעליים': 'נעל ברבים'})
>>> dictionary
{'מרתון': 'מרוץ רצים באורך של כ-26 מייל',
'פרסונה': 'אדם',
'רץ': 'לרוץ בזמן עבר',
'לרוץ': 'לנוע במהירות',
'נעל': 'סוג הנעלה, המכסה את הרגל לא מעל הקרסול',
'נעליים': 'נעל ברבים'}
אם אתם תוהים מדוע הנתונים במילון אינם מסודרים לפי סדר הכנסתם, זה מפני שמילונים (בגרסאות פייתון ישנות מ-3.7) אינם מסודרים. הערה: החל מפייתון 3.7, מילונים שומרים על סדר ההכנסה.
get
# נניח שיש לנו מילון story_count
story_count = {'מאה': 100,
'תשעים': 90,
'שתיים עשרה': 12,
'חמש': 5}
המתודה get()
מחזירה את הערך לפי המפתח שצוין. אם המפתח שצוין אינו קיים, המתודה תחזיר None
.
# המפתח "שתיים עשרה" קיים והמתודה get במקרה זה תחזיר 12
story_count.get('שתיים עשרה')
ניתן להשתמש במתודה כדי לבדוק קיום של מפתחות במילון:
>>> story_count.get('שתיים')
None
כמו כן, ניתן לציין ערך ברירת מחדל שיוחזר במקום None
אם המפתח לא יימצא במילון:
# המתודה תחזיר 0 במקרה שהמפתח הזה אינו קיים
story_count.get('שתיים', 0)
pop
המתודה pop()
מוחקת מפתח ומחזירה את הערך המתאים לו.
>>> story_count.pop('תשעים')
90
>>> story_count
{'שתיים עשרה': 12, 'מאה': 100, 'חמש': 5}
keys
המתודה keys()
מחזירה אוסף (טכנית, אובייקט view) של המפתחות במילון.
>>> story_count.keys()
dict_keys(['מאה', 'שתיים עשרה', 'חמש']) # הסדר עשוי להשתנות בגרסאות ישנות
values
המתודה values()
מחזירה אוסף (טכנית, אובייקט view) של הערכים במילון.
>>> story_count.values()
dict_values([100, 12, 5]) # הסדר עשוי להשתנות בגרסאות ישנות
items
המתודה items()
מחזירה זוגות "מפתח-ערך" (כאוסף של טאפלים, טכנית אובייקט view).
>>> dictionary.items()
dict_items([('פרסונה', 'אדם'),
('לרוץ', 'לנוע במהירות'),
('נעל', 'סוג הנעלה, המכסה את הרגל לא מעל הקרסול'),
('רץ', 'לרוץ בזמן עבר'),
('מרתון', 'מרוץ רצים באורך של כ-26 מייל'),
('נעליים', 'נעל ברבים')]) # הסדר עשוי להשתנות בגרסאות ישנות
איטרציה (מעבר) על מילון
אתם יכולים לבצע איטרציה על כל מפתח במילון.
for key in story_count:
print(key)
ברור שבמקום story_count
אפשר להשתמש ב- story_count.keys()
.
בדוגמת הקוד להלן, לולאת for
משתמשת במתודה items()
כדי לקבל זוג "מפתח-ערך" בכל איטרציה.
>>> for key, value in dictionary.items():
print(key, value)
('פרסונה', 'אדם')
('לרוץ', 'לנוע במהירות')
('נעל', 'סוג הנעלה, המכסה את הרגל לא מעל הקרסול')
('רץ', 'לרוץ בזמן עבר')
('מרתון', 'מרוץ רצים באורך של כ-26 מייל')
('נעליים', 'נעל ברבים')