¿Cómo construir un diccionario por defecto?

84

Si tengo d=dict(zip(range(1,10),range(50,61)))cómo puedo construir un collections.defaultdictfuera de la dict?

El único argumento que defaultdictparece tomar es la función de fábrica, ¿tendré que inicializar y luego revisar el original dy actualizar el defaultdict?

Karthick
fuente

Respuestas:

96

Lea los documentos :

El primer argumento proporciona el valor inicial para el atributo default_factory; por defecto es Ninguno. Todos los argumentos restantes se tratan igual que si se pasaran al constructor dict , incluidos los argumentos de palabras clave.

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

O dado un diccionario d:

from collections import defaultdict
d=dict(zip(range(1,10),range(50,61)))
my_default_dict = defaultdict(int,d)
Jochen Ritzel
fuente
3
¿Es posible extender este enfoque para dictados anidados? Lo siguiente no funciona según lo previsto: default_dict = defaultdict(None,{"a":1,"b":{"c":3}})por ejemplo, default_dict["e"]genera un KeyError en lugar de devolver None
alancalvitti
4
@alancalvitti, eso se debe a que pasar Noneno significa que generará None para claves desconocidas, no usará una en absoluto. Tienes que hacerlodefaultdict(lambda: None, {....})
Eric Darchis
1

Puede construir un defaultdict a partir de dict, pasando el dict como segundo argumento.

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 )
muhsin mohammed
fuente
0

defaultdict es un método de colecciones que no devuelve un error de clave cuando el elemento no está presente.

Prem
fuente