EMZETT.
Login

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

Kapitel 19 von 44 im Kurs Python. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

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
True
print(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üsseln

Ausgabe:

{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.50

Merke

  • {schluessel: wert}; Zugriff mit d[schluessel], sicher mit d.get(schluessel, standard)
  • Schlüssel sind eindeutig und hashbar; die Einfügereihenfolge bleibt erhalten
  • .keys(), .values(), .items() zum Durchlaufen; update, pop, del zum Ändern
  • a | b fü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

Weiter im Kurs

Zurück: Mengen (Sets)

Weiter: Referenzen, Kopien und verschachtelte Daten

Alle Kapitel: Python im Überblick