Dictionaries#
Pythons eingebauter Dictionary-Datentyp bietet assoziative Array-Funktionalität,
die mit Hilfe von Hash-Tabellen implementiert wird. Die eingebaute Funktion
len
gibt die Anzahl der Schlüssel-Wert-Paare in einem Wörterbuch zurück. Die
del
-Anweisung kann zum Löschen eines Schlüssel-Wert-Paares verwendet werden.
Wie bei Listen sind mehrere Dictionary-Methoden (clear
, copy
, get
,
items
, keys
, update
und values
) verfügbar.
>>> x = {1: "eins", 2: "zwei"}
>>> x[3] = "drei"
>>> x["viertes"] = "vier"
>>> list(x.keys())
[1, 2, 3, 'viertes']
>>> x[1]
'eins'
>>> x.get(1, "nicht vorhanden")
'eins'
>>> x.get(5, "nicht vorhanden")
'nicht vorhanden'
Schlüssel müssen vom unveränderlichen Typ sein, einschließlich Zahlen, Zeichenketten und Tupel.
Warnung
Auch wenn ihr in einem Dictionary verschiedene Schlüsseltypen verwenden könnt, solltet ihr das vermeiden, da dadurch nicht nur die Lesbarkeit sondern auch die Sortierung erschwert wird.
Werte können alle Arten von Objekten sein,
einschließlich veränderlicher Typen wie Listen und Dictionaries. Wenn ihr
versucht, auf den Wert eines Schlüssels zuzugreifen, der nicht im Dictionary
enthalten ist, wird eine KeyError
-Exception ausgelöst. Um diesen Fehler zu
vermeiden, gibt die Dictionary-Methode get
optional einen
benutzerdefinierten Wert zurück, wenn ein Schlüssel nicht in einem Wörterbuch
enthalten ist.
setdefault
#
setdefault
kann verwendet werden, um Zähler für
die Schlüssel eines Dicts bereitzustellen, z.B.:
>>> titles = ["Data types", "Lists", "Sets", "Lists"]
>>> for title in titles:
... titles_count.setdefault(title, 0)
... titles_count[title] += 1
...
>>> titles_count
{'Data types': 1, 'Lists': 2, 'Sets': 1}
Bemerkung
Solche Zähloperationen verbreiteten sich schnell, sodass später die Klasse
collections.Counter
zur Python-Standardbibliothek hinzugefügt
wurde. Diese Klasse kann die oben genannten Operationen viel einfacher
durchführen:
>>> collections.Counter(titles)
Counter({'Lists': 2, 'Data types': 1, 'Sets': 1})
Dictionaries zusammenführen#
Ihr könnt zwei Dictionaries zu einem einzigen Dictionary zusammenfügen mit der
dict.update()
-Methode:
>>> titles = {7.0: "Data Types", 7.1: "Lists", 7.2: "Tuples"}
>>> new_titles = {7.0: "Data types", 7.3: "Sets"}
>>> titles.update(new_titles)
>>> titles
{7.0: 'Data types', 7.1: 'Lists', 7.2: 'Tuples', 7.3: 'Sets'}
Bemerkung
Die Reihenfolge der Operanden ist wichtig, da 7.0
dupliziert wird und der
Wert des letzten Schlüssel den vorhergehenden überschreibt.
Erweiterungen#
- python-benedict
dict
-Unterklasse mit Keylist/Keypath/Keyattr-Unterstützung sowie I/O-Shortcuts.- pandas
kann Dicts in Series und DataFrames überführen.