← Все вопросы

Что такое defaultdict и зачем он нужен?

Задан 16 месяцев назад1к просмотров3 ответа
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 читается чище.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект