Python Glossary English

все Python 3collectionsпонятие

collections.defaultdict

defaultdict

Словарь с фабрикой значений по умолчанию. При обращении к отсутствующему ключу создаёт значение через фабрику.

Синтаксис

collections.defaultdict(default_factory, ...)

Фабрика срабатывает на чтении d[key], а значит простое обращение к несуществующему ключу молча создаёт запись и раздувает словарь; если проверяешь наличие ключа, используй in или .get(), они __missing__ не вызывают. Второе — default_factory это вызываемый объект без аргументов, а не готовое значение: нужно defaultdict(list) и defaultdict(int), а не defaultdict([]) или defaultdict(0).

Примеры

from collections import defaultdict
d = defaultdict(list)
d['fruits'].append('apple')
d['fruits'].append('banana')
print(d)  # → defaultdict(<class 'list'>, {'fruits': ['apple', 'banana']})
from collections import defaultdict
counter = defaultdict(int)
for c in 'hello':
    counter[c] += 1
print(dict(counter))  # → {'h': 1, 'e': 1, 'l': 2, 'o': 1}
from collections import defaultdict
by_letter = defaultdict(list)
for w in ['apple', 'ant', 'bat', 'ball', 'cat']:
    by_letter[w[0]].append(w)
print(dict(by_letter))  # → {'a': ['apple', 'ant'], 'b': ['bat', 'ball'], 'c': ['cat']}
from collections import defaultdict
d2 = defaultdict(lambda: 'unknown')
d2['key1'] = 'value'
print(d2['key1'])  # → value
print(d2['missing'])  # → unknown — и ключ 'missing' теперь в словаре
print(len(d2))  # → 2
from collections import defaultdict
grid = defaultdict(lambda: defaultdict(int))
grid['row1']['col1'] += 1
print(grid['row1']['col1'])  # → 1

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности