¿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?

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)

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 )

0

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.