← Все вопросы
Что такое defaultdict и зачем он нужен?
19
Постоянно вижу defaultdict из collections в чужом коде. Чем он лучше обычного словаря и в каких случаях реально упрощает жизнь?
3 ответа
33
✓ Принятый ответ — помог автору
defaultdict — словарь, который сам создаёт значение по умолчанию, когда обращаешься к несуществующему ключу. Это убирает проверки «если ключа ещё нет — заведи».
Классика — группировка и подсчёт:
from collections import defaultdict
# подсчёт
count = defaultdict(int)
for word in words:
count[word] += 1 # без defaultdict тут был бы KeyError
# группировка в списки
groups = defaultdict(list)
for name in names:
groups[name[0]].append(name)
В скобки передаёшь фабрику: int -> 0, list -> [], set -> set(). Когда ключа нет, она вызывается и результат становится значением. С обычным dict пришлось бы писать d.setdefault(...) или проверять if key not in d.
Дарья Громова defaultdict(list) для группировки — теперь понятно зачем · 16 месяцев назад
Егор Иванов автор: топ объяснение · 16 месяцев назад
9
Чтобы не писать if key not in d: d[key] = 0 перед каждым +=. Передаёшь фабрику дефолта (int, list, set).
4
Альтернатива без импорта — d.setdefault(key, []).append(x), но с defaultdict читается чище.
Ваш ответ
Войдите, чтобы ответить на вопрос.