Як побудувати вирок за замовчуванням зі словника?


84

Якщо у мене є, d=dict(zip(range(1,10),range(50,61)))як я можу створити collections.defaultdictз dict?

Єдиний аргумент, defaultdictздається, приймається - це заводська функція, чи доведеться мені ініціалізувати, а потім пройти оригінал dта оновити defaultdict?

Відповіді:


96

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

Перший аргумент забезпечує початкове значення для атрибута default_factory; за замовчуванням значення None. Усі інші аргументи обробляються так само, як якщо б вони були передані конструктору 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, {....})
Ерік Дарчіс,

1

Ви можете побудувати вирок за замовчуванням із 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 )

0

defaultdict це метод із колекцій, який не повертає помилку ключа, коли елемента немає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.