Ein Dictionary (dict) speichert Daten als Paare aus Schlüssel und Wert, wie ein Wörterbuch oder Adressbuch. Du schlägst nicht über eine Position nach, sondern über den Schlüssel. Dictionaries stehen in geschweiften Klammern, ein Paar schreibst du als schluessel: wert.
person = {"name": "Mia", "alter": 17, "stadt": "Köln"}
print(person)
print(person["name"])
print(len(person))
print(type(person)){'name': 'Mia', 'alter': 17, 'stadt': 'Köln'}
Mia
3
<class 'dict'>Seit Python 3.7 merkt sich ein Dictionary die Reihenfolge, in der Einträge hinzugefügt wurden. Schlüssel müssen eindeutig und unveränderlich (hashbar) sein: Texte, Zahlen und Tupel gehen, Listen nicht.
Zugriff
Mit d[schluessel] liest du einen Wert. Fehlt der Schlüssel, entsteht ein KeyError. Die Methode get() ist sicherer, sie liefert None oder einen Standardwert:
person = {"name": "Mia", "alter": 17}
print(person.get("name"))
print(person.get("stadt"))
print(person.get("stadt", "unbekannt"))
print("alter" in person)Mia None unbekannt True
print(person["stadt"])Traceback (most recent call last):
File "beispiel.py", line 2, in <module>
print(person["stadt"])
KeyError: 'stadt'Ändern, hinzufügen, löschen
d = {"a": 1}
d["b"] = 2 # neuer Schlüssel
d["a"] = 100 # vorhandenen Wert ändern
d.update({"c": 3, "d": 4})
print(d)
entfernt = d.pop("b") # liefert den entfernten Wert
del d["c"]
print(entfernt, d){'a': 100, 'b': 2, 'c': 3, 'd': 4}
2 {'a': 100, 'd': 4}Durchlaufen
Schlüssel, Werte oder beides:
preise = {"Apfel": 0.5, "Brot": 2.2, "Käse": 3.9}
for name in preise: # nur Schlüssel
print(name)
for p in preise.values(): # nur Werte
print(p)
for name, p in preise.items(): # Paare
print(f"{name}: {p:.2f} Euro")
print(list(preise.keys()))Apfel Brot Käse 0.5 2.2 3.9 Apfel: 0.50 Euro Brot: 2.20 Euro Käse: 3.90 Euro ['Apfel', 'Brot', 'Käse']
Häufiges Muster: zählen
text = "hallo welt hallo python welt hallo"
anzahl = {}
for wort in text.split():
anzahl[wort] = anzahl.get(wort, 0) + 1
print(anzahl){'hallo': 3, 'welt': 2, 'python': 1}Bequemer geht es mit collections.Counter (siehe Standardbibliothek).
Dictionary-Comprehension und Zusammenführen
quadrate = {x: x ** 2 for x in range(1, 5)}
print(quadrate)
a = {"x": 1, "y": 2}
b = {"y": 20, "z": 30}
print(a | b) # ab Python 3.9: rechts gewinnt bei gleichen Schlüsseln{1: 1, 2: 4, 3: 9, 4: 16}
{'x': 1, 'y': 20, 'z': 30}Verschachtelte Dictionaries
Werte dürfen selbst Listen oder Dictionaries sein, so entstehen strukturierte Daten (ähnlich JSON):
schueler = {
"Mia": {"alter": 17, "noten": [1, 2, 1]},
"Tom": {"alter": 18, "noten": [3, 2]},
}
print(schueler["Mia"]["noten"][0])
for name, daten in schueler.items():
durchschnitt = sum(daten["noten"]) / len(daten["noten"])
print(f"{name}: {durchschnitt:.2f}")1 Mia: 1.33 Tom: 2.50
Merke
{schluessel: wert}; Zugriff mitd[schluessel], sicher mitd.get(schluessel, standard)- Schlüssel sind eindeutig und hashbar; die Einfügereihenfolge bleibt erhalten
.keys(),.values(),.items()zum Durchlaufen;update,pop,delzum Änderna | bführt zwei Dictionaries zusammen (ab 3.9)- Dictionaries lassen sich beliebig verschachteln
Aufgabe
Zähle in dem Text "eins zwei drei zwei drei drei", wie oft jedes Wort vorkommt, und gib die Wörter nach Häufigkeit absteigend aus.