¿Existe alguna forma pitónica agradable de fusionar diccionarios en una lista?

Lo que tengo:

[
    { 'name': "Jack" },
    { 'age': "28" }
]

Lo que me gustaría:

[
    { 'name': "Jack", 'age': "28" }
]
1
Simon Melouah 28 ene. 2016 a las 15:14

4 respuestas

La mejor respuesta

Este es un método que usa dict.update(). En mi opinión, es una solución muy legible:

data = [{'name': 'Jack'}, {'age': '28'}]

new_dict = {}
for d in data:
    new_dict.update(d)

new_data = [new_dict]

print new_data

SALIDA

[{'edad': '28', 'nombre': 'Jack'}]

1
pzp 28 ene. 2016 a las 12:50
out = reduce(lambda one, two: dict(one.items() + two.items()), 
       [{'name': 'Jack'}, {'age': '28'}, {'last_name': 'Daniels'}])
print(out)

SALIDA

{'age': '28', 'last_name': 'Daniels', 'name': 'Jack'}
0
Dmitry T. 28 ene. 2016 a las 12:58

Podrías usar la comprensión de la lista:

final_list = [{key: one_dict[key]
               for one_dict in initial_list
               for key in one_dict.keys()}]

Editar: la comprensión de la lista estaba al revés

1
José Fonseca 29 ene. 2016 a las 11:59

Si está usando Python 3, puede usar collections.ChainMap:

>>> from collections import ChainMap
>>> ld = [
...       { 'name': "Jack" },
...       { 'age': "28" }
...      ]
>>> [dict(ChainMap(*ld))]

 [{'name': 'Jack', 'age': '28'}]
1
xnx 28 ene. 2016 a las 12:58