Empfohlene Unterrichtsinhalte als Vorbereitung für dieses Thema: 02-01/2/3/4/5 (Variablen, Strings, Listen, Integers und Floats, Bool), 03-03 (Schleifen)
Dictionarys ermöglichen es uns, Informationen zueinander in Beziehung zu setzen. Zum Beispiel interessiert uns in der Computerlinguistik oft, wie häufig bestimmte Wörter/Phrasen/Zeichen/… in einem Text vorkommen.
Dafür erstellen wir ein Dictionary, dessen Keys die Strings sind, die uns interessieren, und dessen Values die Häufigkeit jedes Strings im Text angeben.
frequencies = {"und": 12, "oder": 17, "nicht": 5}
print(frequencies)
Ab der Pythonversion 3.7 behalten Dictionarys immer die Reihenfolge, in der die Elemente eingefügt wurden. In früheren Pythonversionen können wir uns nicht darauf verlassen, dass das so ist. Das spielt dann eine Rolle, wenn wir z.B. mit einer for-Schleife durch das Dictionary iterieren wollen.
Hier seht ihr, dass Python Dictionarys für identisch hält, wenn…
freq1 = {"dog": 3, "cat": 5}
freq2 = {"cat": 5, "dog": 3}
print(freq1 == freq2)
Die Informationen, die in einem Dictionary gespeichert sind, können wir abrufen, indem wir den Key angeben, der uns interessiert. Die Rückgabe ist dann der Wert, der zu diesem Key im Dictionary gespeichert ist. Die Syntax dafür ist <dictionary>[key]
.
frequencies = {"und": 12, "oder": 17, "nicht": 5}
print(frequencies["und"])
Ist ein Key nicht vorhanden, tritt ein Fehler auf:
frequencies = {"und": 12, "oder": 17, "nicht": 5}
print(frequencies["weil"])
Dictionarys sind, genau wie Listen, ein veränderlicher Datentyp (mutable). Um einen Wert ins Dictionary einzufügen, schreiben wir:
frequencies = {"und": 12, "oder": 17, "nicht": 5}
print(frequencies) # bisheriger Inhalt des Dictionarys
frequencies["weil"] = 15 # dem Schlüssel "weil" soll jetzt der Wert 15 zugeordnet
# werden
print(frequencies) # Dictionary mit zusätzlichem Schlüssel-Wert-Paar
Achtung: Jeder Schlüssel kann in einem Dictionary nur genau einmal vorkommen. Es gilt immer der zuletzt definierte Wert für den Schlüssel.
Und schließlich können wir auch durch Dictionarys iterieren. Die for
-Schleife beginnt fast genauso wie bei Listen. Das aktuelle Element ist immer ein Schlüssel aus dem Dictionary. Wir können also beispielsweise alle Schlüssel-Wert-Paare nacheinander ausgeben:
frequencies = {"und": 12, "oder": 17, "nicht": 5, "weil": 15}
for word in frequencies:
print("Wort: " + word)
print("Häufigkeit: " + str(frequencies[word]))
Als Schlüssel für Dictionarys sind nur unveränderliche Datentypen erlaubt. Meistens benutzen wir Strings oder Zahlen. Listen sind als Werte möglich, aber nicht als Keys:
freq3 = {"yes": [1,2,3], "no": [4,5,6]}
print(freq3)
freq4 = { [1,2]: "yes", [4,5]: "no"} # :(
Für das Beispiel, in dem Worthäufigkeiten gezählt werden sollen, brauchen wir Strings für die Wörter und Integers für die Häufigkeiten. Als Schlüssel sollten wir die Wörter wählen.
Operation | Auswirkung |
---|---|
list(d) |
Gibt eine Liste der Keys eines Dictionarys d aus. |
del d[key] |
Entfernt einen key aus einem Dictionary d . |
d.get(key[, default]) |
Gibt den Wert des key zurück, oder den default -Wert. |
d.items() |
Gibt eine Sequenz der Schlüssel-Wert-Paare des Dictionary s d zurück. |
d.keys() |
Gibt eine Sequenz der Schlüssel zurück. |
d.values()) |
Gibt eine Sequenz der Werte des zurück. |
d.update(key=value[, key1=value1]) |
Fügt einem Dictionary neue Schlüssel-Wertpaare hinzu bzw. ändert Werte |
Hier wird eine Liste der Keys zurückgegeben
my_dict = {1: "Alles", 2: "hängt" , 3: "mit", 4: "Allem", 5: "zusammen"}
my_dict_keys = list(my_dict) # Eine Liste der Keys wird erstellt
print(my_dict_keys)
Hier wird das Schlüssel-Wert-Paar 5: "zusammen"
entfernt. Das ursprüngliche Dictionary wird verändert.
my_dict = {1: "Alles", 2: "hängt" , 3: "mit", 4: "Allem", 5: "zusammen"}
del my_dict[5]
print(my_dict)
Mit get
kann man auf den Wert eines Schlüssels zugreifen und einen Default-Wert zuweisen, damit kein Key-Error auftritt. Falls man keinen Default-Wert vergibt und ein Schlüssel nicht existiert wird None
zurückgegeben.
my_dict = {1: "Alles", 2: "hängt" , 3: "mit", 4: "Allem", 5: "zusammen"}
wert1 = my_dict.get(5, "Den gibt's nicht")
print(wert1)
print("---")
wert2 = my_dict.get(6, "Den gibt's nicht")
print(wert2)
Die Funktionen d.items()
und d.keys()
und d.values()
geben jeweils Sequenzen der Schlüssel-Wert-Paare, der Schlüssel, und der Werte zurück. Diese Sequenzen sind keine Listen. Wir können aus diesen Sequenzen aber leicht Listen erstellen.
my_dict = {1: "Alles", 2: "hängt" , 3: "mit", 4: "Allem", 5: "zusammen"}
paare = my_dict.items()
schluessel = my_dict.keys()
werte = my_dict.values()
print("---")
for element in [paare, schluessel, werte]:
print(list(element))
Mit d.update()
lassen sich Werte verändern und Schlüssel-Wert-Paare hinzufügen.
my_dict = {1: "Alles", 2: "hängt" , 3: "mit", 4: "Allem", 5: "zusammen"}
my_dict.update({6:"oder", 1:"Vieles", 4:"Vielem"})
print("---")
for schluessel in my_dict:
print(str(schluessel) + ".\t" + my_dict[schluessel])
Es gibt mehrere Möglichkeiten, die Inhalte eines Dictionarys explizit zu sortieren: Entweder nach der Default-Sortierreihenfolge der Keys, oder nach der Sortierreihenfolge der Values.
frequencies = {"und": 12, "oder": 17, "nicht": 5, "weil": 15}
print(frequencies)
for word in sorted(frequencies): # !!!
print(word + "\t" + str(frequencies[word]))
frequencies = {"und": 12, "oder": 17, "nicht": 5, "weil": 15}
print(frequencies)
for word in sorted(frequencies, key=frequencies.get): # !!!
print(word + "\t" + str(frequencies[word]))
frequencies = {"und": 12, "oder": 17, "nicht": 5, "weil": 15}
print(frequencies)
for word in sorted(frequencies, key=frequencies.get, reverse=True): # !!!
print(word + "\t" + str(frequencies[word]))
sorted(d)
lassen sich Dictionaries sowohl nach Schlüssel als auch nach Werten sortieren.