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

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

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


person Karthick    schedule 24.09.2011    source источник


Ответы (4)


Читать документы:

Первый аргумент предоставляет начальное значение для атрибута 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)
person Jochen Ritzel    schedule 24.09.2011
comment
Можно ли расширить этот подход для вложенных диктовок? Следующее не работает должным образом: default_dict = defaultdict(None,{"a":1,"b":{"c":3}}) например default_dict["e"] вызывает KeyError вместо возврата None - person alancalvitti; 28.12.2018
comment
@alancalvitti, потому что передача None не означает, что он будет генерировать None для неизвестных ключей, он вообще не будет его использовать. Вам нужно сделать defaultdict(lambda: None, {....}) - person Eric Darchis; 15.01.2019

Вы можете построить 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 )
person muhsin mohammed    schedule 24.08.2020
comment
Какую версию Python вы используете? Значение int val по умолчанию для меня в Python 3.8.3 равно 0, а не 1. - person shmulvad; 05.01.2021

Вы можете создать defaultdict со словарем, используя callable.

from collections import defaultdict

def dict_():
    return {'foo': 1}

defaultdict_with_dict = defaultdict(dict_)
person hoi ja    schedule 16.03.2021

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

person Prem    schedule 24.10.2020
comment
Это вообще не отвечает на вопрос - person Ignatius; 26.01.2021