Supongamos que tengo dos dicts en Python:¿Hay alguna manera de establecer múltiples valores predeterminados en un dict de Python usando otro dict?
mydict = { 'a': 0 }
defaults = {
'a': 5,
'b': 10,
'c': 15
}
Quiero ser capaz de ampliar mydict
utilizando los valores por defecto de defaults
, de manera que 'a' sigue siendo el mismo, pero 'b' y 'c' están completos. Conozco dict.setdefault()
y dict.update()
, pero cada uno de ellos solo hace la mitad de lo que deseo - con dict.setdefault()
, tengo que repetir cada variable en defaults
; pero con dict.update()
, defaults
volará cualquier valor preexistente en mydict
.
¿Hay alguna funcionalidad que no encuentre dentro de Python que pueda hacer esto? Y si no, ¿hay una manera más Pythonic de escribir un bucle para llamar repetidamente dict.setdefaults()
que esto:
for key in defaults.keys():
mydict.setdefault(key, defaults[key])
Contexto: Estoy escribiendo algunos datos en Python que controla cómo analizar un árbol XML. Hay un dict para cada nodo (es decir, cómo procesar cada nodo), y prefiero que los datos que escribo sean escasos, pero completados con los valores predeterminados. El código de ejemplo es solo un ejemplo ... el código real tiene muchos más pares clave/valor en el dict predeterminado.
(I dan cuenta de toda esta cuestión es más que un detalle sin importancia, pero me ha estado molestando, así que me preguntaba si había una mejor manera de hacer esto que no soy consciente de.)
Sí, esto es lo que suelo hacer también ... – Macke
Pensé en esto, pero no copiar los valores predeterminados completos sería bastante ineficiente (¿especialmente mydict tiene todos los valores establecidos para comenzar)? Estarías creando un dict nuevo, copiando todos los valores de otro, y luego reescribiendo todo el dict nuevamente en ese caso. –
@Daniel Lew: los valores no se copiarán, solo las referencias a ellos. El nuevo dict tendrá nuevas referencias a los mismos valores en la memoria. – nosklo