16.3 Dictionarys mit Standardwerten
Der Datentyp defaultdict ist eine Verallgemeinerung des im letzten Abschnitt besprochenen Datentyps Counter. Bei einer Counter-Instanz wird beim Zugriff auf einen nicht vorhandenen Schlüssel k automatisch das Schlüssel-Wert-Paar {k : 0} zum Dictionary hinzugefügt. Eine defaultdict-Instanz fügt in diesem Fall das Schlüssel-Wert-Paar {k : x()} hinzu, wobei x für einen beliebigen Datentyp steht.
Der Wert-Datentyp wird beim Instanziieren übergeben. Das defaultdict kann danach wie ein normales Dictionary verwendet werden.
Wenn Sie beispielsweise die Wörter eines Textes nach ihrer Länge gruppieren möchten, können Sie dies unter Verwendung des Basisdatentyps dict folgendermaßen erreichen:
>>> t = "if for else while elif with not and or try except"
>>> d = {}
>>> for wort in t.split(" "):
... if len(wort) in d:
... d[len(wort)].append(wort)
... else:
... d[len(wort)] = [wort]
...
>>> d
{2: ['if', 'or'], 3: ['for', 'not', 'and', 'try'], 4: ['else',
'elif', 'with'], 5: ['while'], 6: ['except']}
Mit einem defaultdict lässt sich dies einfacher lösen.
>>> import collections
>>> t = "if for else while elif with not and or try except"
>>> d = collections.defaultdict(list)
>>> for wort in t.split(" "):
... d[len(wort)].append(wort)
...
>>> d
defaultdict(<class 'list'>, {2: ['if', 'or'], 3: ['for', 'not', 'and', 'try'],
4: ['else', 'elif', 'with'], 5: ['while'], 6: ['except']})