שאלה:
איזה מהבאים מתאר בצורה מדויקת את מאפייני המפתחות במילון (dict
) ואת אופן שמירת הסדר של האלמנטים בו?
A. מפתחות יכולים להיות רק מחרוזות, וסדר האלמנטים במילון תמיד תואם את סדר הוספתם.
B. מפתחות יכולים להיות כל סוג נתונים אי-שינויי (ניתן לגיבוב). סדר האלמנטים מובטח החל מ־Python 3.7 (ב־CPython גם מ־3.6).
C. מפתחות יכולים להיות כל סוג נתונים, כולל כאלה הניתנים לשינוי (כמו רשימות). סדר האלמנטים אינו מובטח.
D. מפתחות יכולים להיות רק מספרים שלמים, המדמים מערכים. סדר האלמנטים תמיד ממוין לפי המפתח.
תשובה:
👇
✅ תשובה נכונה: B
✨ הסבר:
מילון (dict
) בפייתון הוא אוסף של זוגות מפתח-ערך, עם מספר מגבלות ותכונות חשובות:
🔑 מפתחות במילון:
- חייבים להיות immutable (בלתי ניתנים לשינוי), כמו:
- מחרוזות (
str
) - מספרים (
int
,float
) - טאפלים (אם כל רכיביהם גם בלתי ניתנים לשינוי)
- מחרוזות (
- חייבים להיות hashable – כלומר ניתן לחשב להם ערך hash קבוע.
- לא ניתן להשתמש ברשימות (
list
), מילונים אחרים או מחלקות הניתנות לשינוי כמפתחות – זה יוביל ל־TypeError
.
🧭 סדר האלמנטים:
- החל מ־Python 3.7, הסדר שבו אלמנטים מוכנסים למילון נשמר.
- ב־CPython 3.6, זה עבד בפועל אך לא היה חלק מהמפרט הרשמי.
- בגרסאות קודמות, לא הובטח הסדר.
🧪 דוגמה בקוד:
# מילון עם מפתחות תקפים מסוגים שונים
my_dict = {
"name": "Alice",
42: "מספר",
(1, 2): "טאפל"
}
print(f"מילון עם מפתחות מסוגים שונים: {my_dict}")
# נסיון להשתמש במפתח לא תקין (רשימה) - יגרום לשגיאה
# invalid_dict = {[1, 2]: "שגיאה"} # TypeError: unhashable type: 'list'
# סדר הכנסת אלמנטים נשמר (בפייתון 3.7+)
ordered_dict = {}
ordered_dict['first'] = 1
ordered_dict['second'] = 2
ordered_dict['third'] = 3
print(f"מילון עם סדר הכנסה: {ordered_dict}")
# צפוי: {'first': 1, 'second': 2, 'third': 3}
🔍 היבטים מרכזיים:
- [היבט 1:] מפתחות חייבים להיות immutable ו־hashable.
- [היבט 2:] הסדר נשמר מאז Python 3.7 – תכונה חשובה לעיבוד מידע עקבי.
📌 לסיכום:
מילונים בפייתון מציעים התאמה מצוינת למבני נתונים עם גישה מהירה לפי מפתח, תוך שמירה על סדר ההוספה (מפייתון 3.7 ואילך).
המפתחות חייבים להיות בלתי ניתנים לשינוי, ולכן האפשרות B היא הנכונה.
תודה! הנה תוספת של טיפים פרקטיים (tips) בסוף ההסבר הקודם — בדיוק כמו שאתה אוהב, בסגנון מודגש ומועיל:
💡 טיפים לשימוש נכון במילונים (dict
) בפייתון:
- ודא שהמפתחות שלך בלתי ניתנים לשינוי (immutable):
השתמש ב־str
,int
, אוtuple
(רק אם הוא עצמו מורכב מאובייקטים בלתי ניתנים לשינוי).
❌ לא להשתמש ב־list
אוdict
בתור מפתח! - נצל את שמירת הסדר (Python 3.7+):
הסדר שבו אתה מוסיף מפתחות יישמר – מצוין ליצירת JSON מסודר, טפסים או ייצוגים מדורגים. - בדוק קיום מפתח לפני גישה ישירה:
במקום לכתובmy_dict[key]
, השתמש ב־key in my_dict
אוmy_dict.get(key)
כדי להימנע מ־KeyError
. - שימוש ב־
defaultdict
אוCounter
(מהמודולcollections
) במידת הצורך:
שימושי במיוחד לעיבוד טקסטים, סיכום מופעים או בניית מבני נתונים מקוננים. - לולאה על מפתחות וערכים יחד (נוח ויעיל):
for key, value in my_dict.items(): print(f"{key} => {value}")
- שכפול מילון נכון – זהירות מהפניות:
השתמש ב־.copy()
כדי להימנע משיתוף לא רצוי בזיכרון:new_dict = old_dict.copy()
- המרה לרשימה לשמירה/מיון:
אם אתה צריך למיין מילון לפי ערכים או מפתחות, המר ל־list
בעזרתsorted()
:sorted_items = sorted(my_dict.items()) # לפי מפתח