Простое дефолтное значение для collections.defaultdict python

В python collections есть удобный инструмент defaultdict, похожий на обычный dict, но с дефолтными значениями для несуществующих ключей:
class collections.defaultdict([default_factory[, ...]])

default_factory – то значение, которое будет использовано по умолчанию (идет None из коробки), должно быть callable(функцией), если оно None, то будет выброшено KeyError исключение при обращение к несуществующему ключу, если установлено, то это значение будет использовано как дефолт.

Что бы проинициализировать 0 достаточно воспользоваться функцией int (int() -> 0):

from collections import defaultdict
test_zero = defaultdict(int)
print(test_zero['a']) -> 0

Если нужно проинициализоровать простым значением, например 1, стоит воспользоваться lambda функцией:

from collections import defaultdict
test_simple = defaultdict(lambda: 1)
test_simple['a'] = 'test'
print(test_simple['a']) -> test
print(test_simple['b']) -> 1

lambda функцию удобно использовать для инициализации простыми значениями или с небольшой логикой, если требуется чего-то большее, то лучше оформить код в полноценную функцию.

Часто удобно инициализировать пустым list, что сделать тоже очень просто.

from collections import defaultdict
test = defaultdict(list)
test['a'].append(1)
test['b'].append(2)
test['a'].append(3)
print(test['a']) -> [1, 3]
print(test['c']) -> []

Очень удобный инструмент для сбора данных по ключу без постоянных проверок на присутствие ключа в словаре.