Kapitel G09 • Schulabgleich 15.0

Dictionaries & Sets: Schlüssel, Werte & Mengen 🗃️✨

Lerne, wie du Daten in Schlüssel-Wert-Paaren organisierst, blitzschnell nachschlägst und mit mathematischen Mengen Duplikate eliminierst.

📂 Dateien dieser Einheit:
💻 In Web-IDE öffnen → 📄 aufgabe.py (Startercode) 🧪 test_aufgabe.py (Tests) 💡 musterloesung.py (Lösung) 📖 README.md

1. Was ist ein Dictionary? (Die Karteikasten-Analogie)

Bisher hast du Daten oft in Listen gespeichert. Bei einer Liste greifst du über eine Zahl (den Index 0, 1, 2, ...) auf Einträge zu. Aber was machst du, wenn du eine Telefonnummer zu einem Namen suchst oder eine deutsche Übersetzung zu einem englischen Wort?

🗃️ Die Karteikasten- & Wörterbuch-Analogie:

Ein Dictionary (Wörterbuch) funktioniert wie ein echter Karteikasten:

  • Vorne auf der Karteikarte steht das Stichwort (der Key / Schlüssel), z.B. "Anna".
  • Auf der Rückseite steht die eigentliche Information (der Value / Wert), z.B. "0171-123456".
  • Du musst nicht alle Karten von vorne bis hinten durchblättern – Python springt sofort in Lichtgeschwindigkeit zum gesuchten Schlüssel!
Python: Dictionary Grundlagen
# 1. Dictionary erstellen mit geschweiften Klammern {key: value}:
kontakt = {
    "name": "Anna",
    "alter": 23,
    "beruf": "Entwicklerin"
}

# 2. Wert über Schlüssel abrufen:
print(kontakt["name"])   # Gibt "Anna" aus

# 3. Eintrag hinzufügen oder verändern:
kontakt["stadt"] = "Berlin"  # Neu hinzugefügt
kontakt["alter"] = 24        # Wert aktualisiert

# 4. Eintrag löschen:
del kontakt["beruf"]         # Entfernt den Schlüssel "beruf"

2. Sicherer Datenzugriff mit .get() & Iteration

Greifst du auf einen Schlüssel zu, den es im Dictionary nicht gibt, stürzt dein Programm mit einem gefürchteten KeyError ab!

🛡️ Die Lebensversicherung: dict.get(key, standardwert)
Verwende .get(), wenn du nicht sicher weißt, ob der Schlüssel existiert. Statt abzustürzen, liefert Python einen sicheren Standardwert zurück!
Vergleich: dict[key] vs dict.get()
user = {"username": "coder99"}

# ❌ Riskant: Programm stürzt bei fehlendem Key ab!
# print(user["email"])  # 💥 KeyError: 'email'

# ✅ Sicher: Liefert Fallback-Wert ohne Absturz!
email = user.get("email", "Keine E-Mail angegeben")
print(email)  # Ausgabe: Keine E-Mail angegeben

Praktische Methoden: .keys(), .values() und .items()

Schleifen über Dictionaries
preise = {"Kaffee": 3.50, "Croissant": 2.20, "Tee": 2.80}

# Schlüssel und Werte gleichzeitig durchlaufen mit .items():
for produkt, preis in preise.items():
    print(f"{produkt} kostet {preis:.2f} €")

3. Was ist ein Set (Menge)? (Die Club-Türsteher-Analogie)

Ein Set (Menge) ist eine Sammlung von Elementen mit zwei besonderen Superkräften: 1. Keine Duplikate erlaubt und 2. Extrem schnelle Suche (in O(1)).

🚪 Die Club-Türsteher-Analogie:

Stell dir einen Club vor, in dem jeder Gast genau einmal auf die Gästeliste darf:

  • Versucht jemand doppelt hineinzugehen, ignoriert der Türsteher den zweiten Versuch einfach.
  • Es gibt im Club keine feste Sitzordnung (Sets sind ungeordnet und haben keinen Index wie set[0]).
Sets erstellen und Duplikate filtern
# Set erstellen (Duplikate fallen automatisch weg):
zahlen = {1, 2, 2, 3, 3, 3, 4}
print(zahlen)  # Ausgabe: {1, 2, 3, 4}

# Blitzschnelle Überprüfung mit 'in':
if 3 in zahlen:
    print("3 ist in der Menge enthalten!")

# ⚠️ Achtung beim leeren Set:
leeres_dict = {}       # Erzeugt ein leeres Dictionary!
leeres_set = set()     # ✅ So erstellst du ein leeres Set!

Mengenoperationen im Überblick

Operation Operator Methode Bedeutung
Schnittmenge (Intersection) A & B A.intersection(B) Gemeinsame Elemente beider Mengen
Vereinigung (Union) A | B A.union(B) Alle Elemente aus A und B zusammen
Differenz A - B A.difference(B) Elemente in A, die NICHT in B vorkommen

4. 🌟 Vollständiges Praxisbeispiel: Wörter-Zähler

Hier siehst du, wie man mit Dictionaries Wort-Häufigkeiten in Texten ermittelt:

Python: Wort-Häufigkeiten zählen
def zaehle_woerter(text):
    haeufigkeit = {}
    woerter = text.lower().split()
    
    for wort in woerter:
        # Wenn das Wort noch nicht im Dict ist, startet der Zähler bei 0:
        haeufigkeit[wort] = haeufigkeit.get(wort, 0) + 1
        
    return haeufigkeit

beispiel = "Python macht Spaß und Python ist mächtig"
print(zaehle_woerter(beispiel))
# Ausgabe: {'python': 2, 'macht': 1, 'spaß': 1, 'und': 1, 'ist': 1, 'mächtig': 1}

5. 🎯 Deine Aufgaben in aufgabe.py

Öffne die Datei aufgabe.py und bearbeite die folgenden 4 Aufgaben:

💡 Lösungshinweise (Aufklappen bei Bedarf)

🔍 Tipp zu TODO 1 (Satzzeichen entfernen & Zählen)

Du kannst Satzzeichen mit replace() durch Leerzeichen ersetzen und dann mit .get(wort, 0) + 1 zählen:

bereinigt = text.lower()
for zeichen in ".,!?;:()\"'":
    bereinigt = bereinigt.replace(zeichen, " ")
woerter = bereinigt.split()
🔍 Tipp zu TODO 4 (Reihenfolge bei Duplikaten behalten)

Nutze eine Liste für das Ergebnis und ein Set zum Merken bereits gesehener Elemente:

seen = set()
ergebnis = []
for element in liste:
    if element not in seen:
        seen.add(element)
        ergebnis.append(element)
return ergebnis

6. 🧪 Lösung überprüfen

Führe im Terminal die automatische Test-Suite aus:

Terminal
python3 test_aufgabe.py