Dies ist der Anwendungsfall für collections.defaultdict
, in dem einfach die int
aufgerufen wird, die für die Standardfabrik abrufbar ist.
>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> d
defaultdict(<class 'int'>, {})
>>> d['k'] +=1
>>> d
defaultdict(<class 'int'>, {'k': 1})
A defaultdict
konfiguriert ist, Elemente zu erstellen, wenn ein fehlender Schlüssel gesucht wird. Sie stellen es mit einem Callable (hier int()
) zur Verfügung, das es verwendet, um einen Standardwert zu erzeugen, wann immer der Lookup mit __getitem__
einen Schlüssel übergeben wird, der nicht vorhanden ist. Diese aufrufbare Nachricht wird in einem Instanzattribut mit der Bezeichnung default_factory
gespeichert.
Wenn Sie keine default_factory
bereitstellen, erhalten Sie eine KeyError
wie für fehlende Schlüssel üblich.
Dann nehmen an, Sie einen anderen Standardwert, vielleicht 1 statt 0 wollten müssen Sie würden einfach eine aufrufbare übergeben, die den gewünschten Startwert, in diesem Fall liefert sehr triviale
>>> d = defaultdict(lambda: 1)
Dies könnte natürlich auch sei eine regulär benannte Funktion.
Es ist erwähnenswert, jedoch, dass, wenn in Ihrem Fall Sie versuchen, nur ein Wörterbuch verwenden, um die Anzahl der bestimmten Werte zu speichern, ein collections.Counter
besser geeignet für den Job ist.
>>> from collections import Counter
>>> Counter('kangaroo')
Counter({'a': 2, 'o': 2, 'n': 1, 'r': 1, 'k': 1, 'g': 1})