Es cierto, aunque eso se funde en un dictado de listas.
Katriel
1
es una lista y no un dict: >>> type ([{'a': 1}, {'b': 2}]) <type 'list'>
killown
Realmente debería haber una sola línea para esto considerando la frecuencia con la que aparece. ¿Hay alguna razón por la que no se admite {** d para d en d_list}?
Markemus
Respuestas:
163
Esto funciona para diccionarios de cualquier longitud:
>>> result ={}>>>for d in L:... result.update(d)...>>> result
{'a':1,'c':1,'b':2,'d':2}
Poca mejora para la respuesta de @dietbuddha con el desempaquetado de diccionario de PEP 448 , para mí, es más legible de esta manera, y también es más rápido :
from functools import reduce
result_dict = reduce(lambda a, b:{**a,**b}, list_of_dicts)
Pero tenga en cuenta que esto solo funciona con las versiones de Python 3.5+.
>>> dictlist =[{'a':1},{'b':2},{'c':1},{'d':2,'e':3}]>>> dict(kv for d in dictlist for kv in d.iteritems()){'a':1,'c':1,'b':2,'e':3,'d':2}>>>
Tenga en cuenta que agregué un segundo par clave / valor al último diccionario para mostrar que funciona con múltiples entradas. Además, las claves de los dictados posteriores en la lista sobrescribirán la misma clave de un dictado anterior.
Respuestas:
Esto funciona para diccionarios de cualquier longitud:
Como comprensión :
fuente
En el caso de Python 3.3+, hay una
ChainMap
colección :Ver también:
fuente
Nota: el orden de 'b' y 'c' no coincide con su salida porque los dictados están desordenados
si los dictados pueden tener más de una clave / valor
fuente
Para los diccionarios planos, puede hacer esto:
fuente
Esto es similar a @delnan pero ofrece la opción de modificar los elementos k / v (clave / valor) y creo que es más legible:
por ejemplo, reemplace k / v elems de la siguiente manera:
desempaqueta la tupla k, v del generador de diccionario .items () después de sacar el objeto dict de la lista
fuente
Esto es asimétrico porque debe elegir qué hacer con las claves duplicadas; en este caso,
dict2
sobrescribirádict1
. Cámbielos por el otro lado.EDITAR: Ah, lo siento, no vi eso.
Es posible hacer esto en una sola expresión:
¡No tengo crédito por esto último!
Sin embargo, yo diría que podría ser más Pythonic (explícito> implícito, plano> anidado) hacer esto con un
for
bucle simple . YMMV.fuente
Puede utilizar unirse a la función de funcy biblioteca:
fuente
Poca mejora para la respuesta de @dietbuddha con el desempaquetado de diccionario de PEP 448 , para mí, es más legible de esta manera, y también es más rápido :
Pero tenga en cuenta que esto solo funciona con las versiones de Python 3.5+.
fuente
Tenga en cuenta que agregué un segundo par clave / valor al último diccionario para mostrar que funciona con múltiples entradas. Además, las claves de los dictados posteriores en la lista sobrescribirán la misma clave de un dictado anterior.
fuente
dic1 = {'María': 12, 'Paco': 22, 'José': 23} dic2 = {'Patricia': 25, 'Marcos': 22 'Tomas': 36}
dic2 = dict (dic1.items () + dic2.items ())
y este será el resultado:
dic2 {'José': 23, 'Marcos': 22, 'Patricia': 25, 'Tomas': 36, 'Paco': 22, 'María': 12}
fuente