¿Cómo fusiono una lista de dictados en un solo dictado?

Resuelto killown asked hace 14 años • 12 respuestas

¿Cómo puedo convertir una lista de dictados como [{'a':1}, {'b':2}, {'c':1}, {'d':2}]en un solo dictado como {'a':1, 'b':2, 'c':1, 'd':2}?


Las respuestas aquí sobrescribirán las claves que coincidan entre dos de los dictados de entrada, porque un dictado no puede tener claves duplicadas. Si desea recopilar varios valores de claves coincidentes, consulte ¿Cómo fusionar dictados y recopilar valores de claves coincidentes? .

killown avatar Aug 16 '10 22:08 killown
Aceptado

Esto funciona para diccionarios de cualquier longitud:

>>> result = {}
>>> for d in L:
...    result.update(d)
... 
>>> result
{'a':1,'c':1,'b':2,'d':2}

Como comprensión :

# Python >= 2.7
{k: v for d in L for k, v in d.items()}

# Python < 2.7
dict(pair for d in L for pair in d.items())
 avatar Aug 16 '2010 16:08

En el caso de Python 3.3+, hay una ChainMapcolección :

>>> from collections import ChainMap
>>> a = [{'a':1},{'b':2},{'c':1},{'d':2}]
>>> dict(ChainMap(*a))
{'b': 2, 'c': 1, 'a': 1, 'd': 2}

Ver también:

  • ¿Cuál es el propósito de collections.ChainMap?
alecxe avatar Jan 13 '2016 05:01 alecxe

Poca mejora para la respuesta de @dietbuddha con el descomprimido del 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+.

Insomniac631 avatar Feb 09 '2020 17:02 Insomniac631