Como otros han mencionado, a.update(b)
para algunos dictados a
y b
logrará el resultado que ha pedido en su pregunta. Sin embargo, quiero señalar que muchas veces he visto que el extend
método de mapear / establecer objetos desea que en la sintaxis a.extend(b)
, a
los valores de NO se sobrescriban con b
los valores de. a.update(b)
sobrescribe a
los valores, por lo que no es una buena opción paraextend
.
Tenga en cuenta que algunos idiomas llaman a este método defaults
oinject
, ya que puede considerarse como una forma de inyectar los valores de b (que podrían ser un conjunto de valores predeterminados) en un diccionario sin sobrescribir los valores que ya podrían existir.
Por supuesto, podrías notar que a.extend(b)
es casi lo mismo que b.update(a); a=b
. Para eliminar la asignación, puede hacerlo así:
def extend(a,b):
"""Create a new dictionary with a's properties extended by b,
without overwriting.
>>> extend({'a':1,'b':2},{'b':3,'c':4})
{'a': 1, 'c': 4, 'b': 2}
"""
return dict(b,**a)
Gracias a Tom Leys por esa idea inteligente usando un dict
constructor sin efectos secundarios extend
.