¿Cómo fusiono una lista de dictados en un solo dictado?
¿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? .
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())
En el caso de Python 3.3+, hay una ChainMap
colecció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?
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+.