Kurz: 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.
Teil des Kurses Python
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))Ausgabe:
{'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)Ausgabe:
Mia
None
unbekannt
Trueprint(person["stadt"])Fehlermeldung:
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)Ausgabe:
{'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()))Ausgabe:
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)Ausgabe:
{'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üsselnAusgabe:
{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}")Ausgabe:
1
Mia: 1.33
Tom: 2.50Merke
{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
Übungsaufgabe
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.
Quiz zur Selbstkontrolle
Was liefert d.get("x", 0), wenn der Schlüssel "x" fehlt?
- 0 (richtig)
- None
- Einen KeyError
- Den ersten Wert des Dictionaries
Welcher Typ darf kein Dictionary-Schlüssel sein?
- list (richtig)
- str
- int
- tuple
Wie durchläufst du Schlüssel und Werte gleichzeitig?
- for k, v in d.items(): (richtig)
- for k, v in d:
- for k, v in d.pairs():
- for (k, v) in d.keys():
Weiter im Kurs
Zurück: Mengen (Sets)
Weiter: Referenzen, Kopien und verschachtelte Daten
Alle Kapitel: Python im Überblick