מילונים חלק ב' – יצירה, הכנסה והצגת נתונים

בפוסט הקודם הסברתי קצת את התיאוריה שמאחורי מבנה הנתונים מסוג מילון בפייתון. בפוסט הזה אדגים כיצד לעבוד איתם ואיך אתם יכולים לאסוף ולנהל נתונים בצורה נוחה וקלה בעזרת מילון.

יצירת מילון

ממש כמו במבני הנתונים האחרים שעברנו עליהם עד עכשיו, גם מילונים אפשר לכתוב כאשר הם כבר מכילים ערכים, או לייצר אותם ריקים ולהוסיף ערכים בהמשך. כדי לייצר מילון ריק אנחנו יכולים להשתמש בפונקציה dict או פשוט לציין סוגריים מסולסלים ריקים (זאת הסיבה שכדי להגדיר סט ריק אי אפשר פשוט לרשום סוגריים מסולסלים אלא להשתמש בפונקציה set)

כאמור, מילונים מורכבים מצמדים – מפתח וערך. הערכים מופרדים ביניהם בנקודותיים והצמדים עצמם מופרדים בפסיקים. בואו ניצור מילון שיש בו כבר כמה ערכים:

הוספת ומחיקת ערכים

הוספת ערך לא יכולה להיות פשוטה יותר: כל מה שצריך לעשות זה לציין את "המיקום" (המפתח) של הערך שאותו נרצה להכניס ולהציב בו את הערך עצמו:

עשיתם טעות? רוצים לעדכן ערך? עדכון ערכים במילון יתבצע בדיוק באותה צורה. ציון של מפתח קיים יעדכן את הערך שלו, בעוד שציון מפתח שאינו קיים יצור אותו עם הערך המבוקש

כדי למחוק ערך ממילון נוכל להשתמש בפקודה del ולציין את המפתח שנרצה להסיר (ערך לא יכול להשאר ללא מפתח ולכן הצמד כולו יוסר).

אפשרות נוספת היא שימוש במתודה pop שכבר הכרנו כשעברנו על רשימות. המתודה pop מסירה ערך מהמערך וגם מחזירה אותו בעת ובעונה אחת. המשמעות היא שניתן לבצע הדפסה של הפעולה, או הצבה לתוך משתנה ולקבל את הערך שהוסר. כשמדובר ברשימה, ברירת המחדל של pop היא הסרה של הערך האחרון.
מילונים, כמו סטים, הם בעצם קבוצה של ערכים המתקיימים כאובייקט ללא סדר מסויים. אין ערך "ראשון" או "אחרון" ואי אפשר להשתמש ב-slicers כדי לקבל אחד או יותר מהערכים במילון. זאת הסיבה ש-pop חייבת לקבל מפתח כפרמטר במקרה של מילון

שימו לב שבשתי הטכניקות הללו (del, pop) יש להשתמש במפתח קיים, אחרת נקבל שגיאה.

הצגת ערכים מתוך מילון

כמו כל מבנה נתונים אחר, ניתן להשתמש ב-print כדי לבצע הדפסה על מנת להציג את תכולת המילון. כאמור אין למילונים סדר ולכן אין התחייבות לגבי הסדר שבו תקבלו את הערכים בחזרה. ערכים שתוסיפו לא בהכרח יופיעו בסדר שבו הכנסתם אותם.

בגלל שאין אפשרות להשתמש ב-slicers, כדי להדפיס ערך בודד נציין במקום מספר אינדקס את המפתח של הערך.

ניתן להדפיס ערך על פי מפתח, אבל לא מפתח על פי ערך:

בצורה הזאת פייתון תמיד תחפש מפתח ולכן קיבלנו שגיאה שהמפתח אינו קיים (העובדה שלאחד המפתחות קיים ערך כזה אינה רלוונטית).

כמו שראינו הדפסה של אובייקט המילון תדפיס את כל המידע שבו (מפתחות + ערכים) אך ריצה על המילון בעזרת לולאת for תחזיר רק את המפתחות.

עוד דרך שבה נוכל לקבל את המפתחות בלבד היא להשתמש במתודה keys. המתודה תחזיר אובייקט (דומה מאוד לרשימה אבל לא בדיוק רשימה) אשר מכיל את כל המפתחות במילון.

באופן דומה נוכל להשתמש במתודה values כדי לבודד את הערכים.

המתודה items יוצרת רשימה של צמדים (מסודרים בתוך טאפלים) כדי שנוכל לעבוד עם המפתחות והערכים באותה הלולאה.

Python 2

בגרסה הקודמת של פייתון המתודה items נקראה iteritems אך הפעולה זהה