Jest to przypadek użycia dla collections.defaultdict
, tutaj po prostu za pomocą numeru int
na żądanie dla fabryki fabrycznej.
>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> d
defaultdict(<class 'int'>, {})
>>> d['k'] +=1
>>> d
defaultdict(<class 'int'>, {'k': 1})
defaultdict
skonfigurowany jest do tworzenia elementów kiedy brakujący klucz jest poszukiwany. Dostarczysz mu możliwość wywołania (tutaj int()
), której używa do tworzenia wartości domyślnej, gdy wyszukiwanie z __getitem__
jest przekazywane kluczem, który nie istnieje. To wywołanie jest przechowywane w atrybucie instancji o nazwie default_factory
.
Jeśli nie podasz numeru default_factory
, otrzymasz numer KeyError
jak zwykle za brakujące klucze.
Następnie załóżmy, że chciał inną wartość domyślną, chyba 1 zamiast 0. Można by po prostu muszą przejść wywoływalnym który zapewnia żądaną wartość początkowa, w tym przypadku bardzo trywialnie
>>> d = defaultdict(lambda: 1)
to może oczywiście również być dowolną zwykłą, nazwaną funkcją.
Warto zauważyć jednak, że jeśli w przypadku, gdy starają się po prostu korzystać ze słownika, aby zapisać liczbę poszczególnych wartości, collections.Counter
jest bardziej odpowiedni do tego zadania.
>>> from collections import Counter
>>> Counter('kangaroo')
Counter({'a': 2, 'o': 2, 'n': 1, 'r': 1, 'k': 1, 'g': 1})