Как построить defaultdict из словаря?


88

Если у меня есть, d=dict(zip(range(1,10),range(50,61)))как я могу построить collections.defaultdictиз dict?

Единственный аргумент, который, defaultdictпохоже, принимает, - это фабричная функция, мне нужно будет инициализировать, а затем просмотреть оригинал dи обновить defaultdict?

Ответы:


99

Прочтите документы :

Первый аргумент обеспечивает начальное значение атрибута default_factory; по умолчанию - Нет. Все остальные аргументы обрабатываются так же, как если бы они были переданы конструктору dict , включая аргументы ключевого слова.

from collections import defaultdict
d=defaultdict(int, zip(range(1,10),range(50,61)))

Или дан словарь d:

from collections import defaultdict
d=dict(zip(range(1,10),range(50,61)))
my_default_dict = defaultdict(int,d)

3
Можно ли распространить этот подход на вложенные диктовки? Следующее работает не так, как задумано: default_dict = defaultdict(None,{"a":1,"b":{"c":3}})например, default_dict["e"]вызывает KeyError вместо возврата None
alancalvitti

4
@alancalvitti, потому что передача Noneне означает, что он не будет генерировать None для неизвестных ключей, он не будет использовать его вообще. Вы должны сделатьdefaultdict(lambda: None, {....})
Эрик Дарчис

3

Вы можете создать defaultdict из dict, передав dict в качестве второго аргумента.

from collections import defaultdict

d1 = {'foo': 17}
d2 = defaultdict(int, d1)

print(d2['foo'])  ## should print 17
print(d2['bar'])  ## should print 1 (default int val )

Какую версию Python вы используете? Значение int val по умолчанию для меня в Python 3.8.3 равно 0, а не 1.
shmulvad

0

defaultdict - это метод из коллекций, который не возвращает ключевую ошибку, когда элемент отсутствует.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.