5

מילונים וקבוצות

Dictionaries & Sets

🎯 מטרות הלמידה

  • יצירת מילונים Key-Value
  • גישה לערכים ומתודות: keys, values, items, get
  • קבוצות (Sets) וייחודיות
  • פעולות: union, intersection, difference

5.1מילונים - יסודות

📖 מילון = מפתח:ערך

מילון מאחסן נתונים בזוגות של מפתח (Key) וערך (Value). גישה מהירה לפי מפתח.

# יצירת מילון
phonebook = {
    'דני': '050-1234567',
    'רונית': '052-7654321'
}

# גישה לערך
print(phonebook['דני'])  # 050-1234567

# הוספה/עדכון
phonebook['יוסי'] = '054-1111111'

# מחיקה
del phonebook['רונית']

מפתחות חייבים להיות Immutable:

  • ✅ מחרוזת, מספר, Tuple
  • ❌ רשימה (Mutable!)

5.2מתודות מילון

🔧 מתודות שימושיות

מתודהמחזירדוגמה
.keys()כל המפתחותd.keys()
.values()כל הערכיםd.values()
.items()זוגות (key, value)d.items()
.get(key, default)ערך או ברירת מחדלd.get('x', 0)
grades = {'דני': 85, 'רונית': 92}

# מעבר על מילון (מודול 2 - לולאות)
for name, grade in grades.items():
    print(f'{name}: {grade}')

# גישה בטוחה עם get
print(grades.get('יוסי', 'לא נמצא'))  # לא נמצא
⚠️ dict['key'] זורק שגיאה אם המפתח לא קיים. dict.get('key') מחזיר None.

5.3קבוצות - Sets

🔵 Set - אוסף ייחודי

קבוצה מכילה רק ערכים ייחודיים - ללא כפילויות!

# יצירת Set
nums = {1, 2, 3, 3, 2}  # כפילויות מוסרות
print(nums)  # {1, 2, 3}

# הוספה והסרה
nums.add(4)
nums.remove(1)

# המרה מרשימה (מודול 3)
my_list = [1, 2, 2, 3, 3, 3]
unique = set(my_list)  # {1, 2, 3}

5.4פעולות על קבוצות

🔀 פעולות מתמטיות

A = {1, 2, 3, 4}
B = {3, 4, 5, 6}

# איחוד (Union) - כל האיברים
print(A | B)  # {1, 2, 3, 4, 5, 6}

# חיתוך (Intersection) - משותפים
print(A & B)  # {3, 4}

# הפרש (Difference) - ב-A ולא ב-B
print(A - B)  # {1, 2}

# הפרש סימטרי - לא בשניהם
print(A ^ B)  # {1, 2, 5, 6}

שימושים מעשיים:

# מציאת מילים משותפות (מודול 4 - מחרוזות)
text1 = 'I love Python'
text2 = 'I love coding'

words1 = set(text1.lower().split())
words2 = set(text2.lower().split())

common = words1 & words2
print(common)  # {'i', 'love'}

5.5מתודות מילון מתקדמות

🗝️ מתודות חשובות של dict

phonebook = {'Chris': '555-1111', 'Katie': '555-2222'}

# get() - גישה בטוחה
print(phonebook.get('Chris'))         # 555-1111
print(phonebook.get('Andy', 'לא נמצא'))  # לא נמצא (ולא שגיאה!)

# pop() - הסרה והחזרת ערך
num = phonebook.pop('Chris')
print(num)        # 555-1111
print(phonebook)  # {'Katie': '555-2222'}

# update() - מיזוג מילונים
extra = {'Bob': '555-3333', 'Katie': '555-9999'}
phonebook.update(extra)  # Katie מתעדכנת!
print(phonebook)  # {'Katie': '555-9999', 'Bob': '555-3333'}

# setdefault() - הוסף רק אם לא קיים
phonebook.setdefault('Dan', '555-0000')
phonebook.setdefault('Katie', '000-0000')  # לא ישנה!
print(phonebook['Dan'])    # 555-0000
print(phonebook['Katie'])  # 555-9999 (לא השתנה!)
⚠️ מלכודת: dict['key'] שלא קיים → KeyError! תמיד העדיפו dict.get('key') לגישה בטוחה.

5.6פעולות על קבוצות (Set Operations)

🔵 פעולות Set

פעולהמתודהאופרטורתיאור
איחודunion()|כל האיברים
חיתוךintersection()&רק המשותפים
הפרשdifference()-ב-A אבל לא ב-B
הפרש סימטריsymmetric_difference()^בדיוק באחד
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}

print(A | B)   # {1, 2, 3, 4, 5, 6} - איחוד
print(A & B)   # {3, 4} - חיתוך
print(A - B)   # {1, 2} - הפרש (A פחות B)
print(B - A)   # {5, 6} - הפרש (B פחות A)
print(A ^ B)   # {1, 2, 5, 6} - הפרש סימטרי

# בדיקות
print(3 in A)         # True
print({1, 2}.issubset(A))   # True
print(A.issuperset({1, 2})) # True

שאלות תרגול

5 שאלות בנושא זה

התחל תרגול →