values keys item dictionaries create python dictionary

keys - python dictionary of dictionaries



Python "extender" para un diccionario (5)

¿Has intentado usar la comprensión del diccionario con el mapeo del diccionario?

c = {**a, **b} # c = { "a" : 1, "b" : 2, "c" : 3, "d" : 4 }

¿Cuál es la mejor manera de extender un diccionario con otro? Por ejemplo:

>>> a = { "a" : 1, "b" : 2 } >>> b = { "c" : 3, "d" : 4 } >>> a {''a'': 1, ''b'': 2} >>> b {''c'': 3, ''d'': 4}

Estoy buscando cualquier operación para obtener este bucle for evitar:

{ "a" : 1, "b" : 2, "c" : 3, "d" : 4 }

Deseo hacer algo como:

a.extend(b) # This does not work


Como han mencionado otros, a.update(b) para algunos dictados a y b logrará el resultado que solicitó en su pregunta. Sin embargo, quiero señalar que muchas veces he visto que el método extend de asignación / conjunto de objetos desea que, en la sintaxis a.extend(b) , los valores de a NO deban ser sobrescritos por los valores de b . a.update(b) sobrescribe los valores de a, por lo que no es una buena opción para extend .

Tenga en cuenta que algunos idiomas llaman a este método defaults o inject , ya que se puede considerar 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 existan.

Por supuesto, puede observar que a.extend(b) es casi lo mismo que b.update(a); a=b b.update(a); a=b . Para eliminar la tarea, puedes 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 utilizando un constructor de dict sin efectos secundarios para extend .


Una hermosa joya en esta pregunta cerrada :

El "modo oneliner", que no modifica ninguno de los dictados de entrada, es

basket = dict(basket_one, **basket_two)

Aprende lo que **basket_two (el ** ) significa aquí .

En caso de conflicto, los elementos de basket_two los de basket_one . A medida que avanzan los one-liners, esto es bastante legible y transparente, y no tengo reparos en usarlo en cualquier momento en que un dict que sea una mezcla de otros dos sea útil (cualquier lector que tenga problemas para entenderlo, de hecho, estará muy bien atendido por la forma en que esto lo incita a aprender sobre dict y la forma ** ;-). Así, por ejemplo, utiliza como:

x = mungesomedict(dict(adict, **anotherdict))

son ocurrencias razonablemente frecuentes en mi código.

Originalmente enviado por Alex Martelli

Nota: En Python 3, esto solo funcionará si cada clave en basket_two es una string .


a.update(b)

Agregará claves y valores de b a a , sobrescribiendo si ya hay un valor para una clave.