Ваш пример имеет смысл только тогда, когда вы получаете доступ к ключам, которые явно не добавлены в словарь:
>>> d = defaultdict(int)
>>> d['one']
0
>>> d = defaultdict(list)
>>> d['one']
[]
>>> d = defaultdict(lambda: None)
>>> d['one'] is None
True
Как видите, использование словаря по умолчанию даст каждому ключу, который вы пытаетесь получить доступ, значение по умолчанию. Это значение по умолчанию берется путем вызова функции, которую вы передаете конструктору. Таким образом, передача 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
позаботится о правильной инициализации списка.
person
poke
schedule
22.11.2015