Skip to content

Kapitel 10: Wörterbücher und Mengen

🎯 Lernziele

In diesem Kapitel lernst du:

  • Wörterbücher (dict) erstellen und bearbeiten
  • Auf Wörterbuchwerte zugreifen
  • Mengen (set) erstellen (Duplikate vermeiden)
  • Mengenoperationen (Schnittmenge, Vereinigung, etc.)

10.1 Wörterbücher (dict)

📖 Wörterbuch erstellen

python
# Wörterbuch mit geschweiften Klammern
benutzer = {
    "name": "Max",
    "alter": 25,
    "email": "max@example.com",
    "ist_admin": False
}

print(benutzer)
# {'name': 'Max', 'alter': 25, 'email': 'max@example.com', 'ist_admin': False}

🔑 Schlüssel-Zugriff (Key Access)

python
benutzer = {"name": "Max", "alter": 25, "email": "max@example.com"}

# Methode 1: Eckige Klammern (Fehler wenn Schlüssel nicht existiert)
print(benutzer["name"])   # Max
print(benutzer["alter"])  # 25

# Methode 2: get()-Methode (gibt None zurück wenn nicht gefunden)
print(benutzer.get("name"))      # Max
print(benutzer.get("telefon"))  # None (kein Fehler!)
print(benutzer.get("telefon", "Nicht vorhanden"))  # "Nicht vorhanden"

➕ Elemente hinzufügen/ändern

python
benutzer = {"name": "Max", "alter": 25}

# Element hinzufügen/ändern
benutzer["email"] = "max@example.com"
benutzer["alter"] = 26  # Ändert bestehenden Wert

print(benutzer)
# {'name': 'Max', 'alter': 26, 'email': 'max@example.com'}

➖ Elemente entfernen

python
benutzer = {"name": "Max", "alter": 25, "email": "max@example.com"}

# del - löschen
del benutzer["email"]
print(benutzer)  # {'name': 'Max', 'alter': 25}

# pop() - löschen und Wert zurückgeben
email = benutzer.pop("email", "Nicht gefunden")
print(email)      # max@example.com
print(benutzer)  # {'name': 'Max', 'alter': 25}

# popitem() - letztes Element löschen (Python 3.7+)
benutzer.popitem()

# clear() - alle Elemente löschen
benutzer.clear()
print(benutzer)  # {}

🔍 Nützliche Methoden

python
benutzer = {"name": "Max", "alter": 25, "email": "max@example.com"}

# keys() - alle Schlüssel
print(benutzer.keys())    # dict_keys(['name', 'alter', 'email'])

# values() - alle Werte
print(benutzer.values())  # dict_values(['Max', 25, 'max@example.com'])

# items() - alle Schlüssel-Wert-Paare
print(benutzer.items())
# dict_items([('name', 'Max'), ('alter', 25), ('email', 'max@example.com')])

# Über Wörterbuch iterieren
for schlüssel, wert in benutzer.items():
    print(f"{schlüssel}: {wert}")

💡 Praxisbeispiel: Studentenverwaltung

python
# Studentendatenbank
studenten = {}

# Student hinzufügen
def student_hinzufügen(matrikelnummer, name, alter, fach):
    studenten[matrikelnummer] = {
        "name": name,
        "alter": alter,
        "fach": fach
    }
    print(f"Student {name} hinzugefügt!")

# Student abrufen
def student_abrufen(matrikelnummer):
    if matrikelnummer in studenten:
        return studenten[matrikelnummer]
    else:
        return "Student nicht gefunden!"

# Test
student_hinzufügen("S001", "Max", 20, "Informatik")
student_hinzufügen("S002", "Anna", 22, "Mathematik")

print(student_abrufen("S001"))
print(student_abrufen("S003"))  # Nicht gefunden

10.2 Mengen (set)

🔺 Menge erstellen (KEINE Duplikate!)

python
# Menge mit geschweiften Klammern
zahlen = {1, 2, 3, 3, 4, 4, 5}
print(zahlen)  # {1, 2, 3, 4, 5} (Duplikate werden entfernt!)

# Mit set()-Funktion
text = "hello"
buchstaben = set(text)
print(buchstaben)  # {'h', 'e', 'l', 'o'} (zwei 'l' werden zu einem!)

# LEERE Menge erstellen (WICHTIG!)
leer1 = set()   # Richtig: leere Menge
leer2 = {}      # FALSCH! Das erstellt ein leeres Wörterbuch

➕ Elemente hinzufügen

python
zahlen = {1, 2, 3}

# add() - ein Element hinzufügen
zahlen.add(4)
print(zahlen)  # {1, 2, 3, 4}

# update() - mehrere Elemente hinzufügen
zahlen.update([5, 6, 7])
print(zahlen)  # {1, 2, 3, 4, 5, 6, 7}

➖ Elemente entfernen

python
zahlen = {1, 2, 3, 4, 5}

# remove() - entfernen (Fehler wenn nicht gefunden)
zahlen.remove(3)
print(zahlen)  # {1, 2, 4, 5}

# discard() - entfernen (KEIN Fehler wenn nicht gefunden)
zahlen.discard(10)  # Kein Fehler!
print(zahlen)  # {1, 2, 4, 5}

# pop() - zufälliges Element entfernen (Mengen sind unsortiert!)
entfernt = zahlen.pop()
print(entfernt)  # Zufälliges Element
print(zahlen)

# clear() - alle Elemente entfernen
zahlen.clear()
print(zahlen)  # set()

🧮 Mengenoperationen

python
a = {1, 2, 3, 4, 5}
b = {4, 5, 6, 7, 8}

# Schnittmenge (INTERSECTION) - gemeinsame Elemente
print(a & b)       # {4, 5}
print(a.intersection(b))  # {4, 5}

# Vereinigung (UNION) - alle Elemente (ohne Duplikate)
print(a | b)       # {1, 2, 3, 4, 5, 6, 7, 8}
print(a.union(b))  # {1, 2, 3, 4, 5, 6, 7, 8}

# Differenz (DIFFERENCE) - Elemente in a, aber nicht in b
print(a - b)       # {1, 2, 3}
print(a.difference(b))  # {1, 2, 3}

# Symmetrische Differenz - Elemente in a ODER b, aber nicht in beiden
print(a ^ b)       # {1, 2, 3, 6, 7, 8}
print(a.symmetric_difference(b))  # {1, 2, 3, 6, 7, 8}

✅ Überprüfungsmethoden

python
a = {1, 2, 3}
b = {1, 2, 3, 4, 5}

# Teilmenge (subset)
print(a <= b)      # True (a ist Teilmenge von b)
print(a.issubset(b))  # True

# Obermenge (superset)
print(b >= a)      # True (b ist Obermenge von a)
print(b.issuperset(a))  # True

# Disjunkt (keine gemeinsamen Elemente)
c = {6, 7, 8}
print(a.isdisjoint(c))  # True (keine gemeinsamen Elemente)

💡 Praxisbeispiel: Duplikate entfernen

python
# Liste mit Duplikaten
zahlen_liste = [1, 2, 2, 3, 3, 3, 4, 5, 5]

# Duplikate mit Menge entfernen
zahlen_menge = set(zahlen_liste)
print(zahlen_menge)  # {1, 2, 3, 4, 5}

# Zurück in Liste konvertieren
zahlen_eindeutig = list(zahlen_menge)
print(zahlen_eindeutig)  # [1, 2, 3, 4, 5] (Reihenfolge kann anders sein!)

💡 Praxisbeispiel: Gemeinsame Freunde finden

python
# Freundeslisten
freunde_max = {"Anna", "Tom", "Lisa", "Tim"}
freunde_anna = {"Tom", "Lisa", "Kevin", "Sarah"}

# Gemeinsame Freunde (Schnittmenge)
gemeinsam = freunde_max & freunde_anna
print(f"Gemeinsame Freunde: {gemeinsam}")  # {'Tom', 'Lisa'}

# Freunde von beiden (Vereinigung)
alle_freunde = freunde_max | freunde_anna
print(f"Alle Freunde: {alle_freunde}")

# Nur Freunde von Max (nicht von Anna)
nur_max = freunde_max - freunde_anna
print(f"Nur Freunde von Max: {nur_max}")  # {'Tim'}

⚠️ Häufige Fehler

❌ Fehler 1: Wörterbuch-Schlüssel existiert nicht

python
benutzer = {"name": "Max"}

# Falsch (KeyError!)
# print(benutzer["alter"])

# Richtig: get() verwenden
print(benutzer.get("alter"))  # None (kein Fehler)
print(benutzer.get("alter", "Nicht vorhanden"))  # "Nicht vorhanden"

❌ Fehler 2: Menge ist unsortiert!

python
zahlen = {5, 2, 8, 1, 9}
print(zahlen)  # {1, 2, 5, 8, 9} (Reihenfolge nicht garantiert!)

# Wenn Sortierung wichtig ist:
zahlen_sortiert = sorted(zahlen)
print(zahlen_sortiert)  # [1, 2, 5, 8, 9]

❌ Fehler 3: Leere Menge erstellen

python
# Falsch (das ist ein Wörterbuch!)
leer = {}

# Richtig (das ist eine Menge!)
leer = set()
print(type(leer))  # <class 'set'>

📝 Zusammenfassung

In diesem Kapitel hast du gelernt:

  • ✅ Wörterbücher (dict) zu erstellen und zu bearbeiten
  • ✅ Auf Wörterbuchwerte zuzugreifen ([] vs. get())
  • ✅ Wörterbuchmethoden zu verwenden (keys, values, items)
  • ✅ Mengen (set) zu erstellen (Duplikate werden entfernt!)
  • ✅ Mengenoperationen durchzuführen (Schnittmenge, Vereinigung, etc.)
  • ✅ Häufige Fehler zu vermeiden

🎯 Übung

  1. Erstelle ein Wörterbuch mit Informationen über dich (Name, Alter, Stadt, Hobbys)
  2. Füge ein neues Hobby hinzu und entferne eines
  3. Erstelle zwei Mengen mit deinen Lieblingszahlen und finde die gemeinsamen Zahlen
  4. Entferne Duplikate aus einer Liste mit set()

⏭️ Nächstes Kapitel

In Kapitel 11 lernen wir Funktionen - den Schlüssel zur wiederverwendbaren Code!

Frei für alle Anfänger