Ваш пример имеет смысл только тогда, когда доступ к разделам, которые явно не добавляется в словарь:
>>> d = defaultdict(int)
>>> d['one']
0
>>> d = defaultdict(list)
>>> d['one']
[]
>>> d = defaultdict(lambda: None)
>>> d['one'] is None
True
Как вы можете видеть, используя Dict по умолчанию даст каждый ключ вы пытаетесь получить доступ значения по умолчанию. Это значение по умолчанию принимается вызовом функции, которую вы передаете конструктору. Таким образом, передача int
установит int()
в качестве значения по умолчанию (которое равно 0); передача list
установит list()
как значение по умолчанию (которое является пустым списком []
); и прохождение lambda: None
установит (lambda: None)()
в качестве значения по умолчанию (которое равно None
).
Это то, что делает словарь по умолчанию. Ничего больше.
Идея состоит в том, что таким образом вы можете настроить параметры по умолчанию, которые вам не нужны, чтобы вручную настроить первый раз, когда вы хотите получить доступ к ключу. Так, например, что-то вроде этого:
d = {}
for item in some_source_for_items:
if item['key'] not in d:
d[item['key']] = []
d[item['key']].append(item)
который просто устанавливает новый пустой список для каждого словаря элемента при доступе, может быть сведено к следующим образом:
d = defaultdict(list)
for item in some_source_for_items:
d[item['key']].append(item)
И defaultdict
сделает обязательно правильно инициализируйте список.
Вы можете получить ответ на него по следующей ссылке https://stackoverflow.com/a/49184504/7187965 –