Ini asimetris karena Anda perlu memilih apa yang harus dilakukan dengan kunci duplikat; dalam hal ini, dict2akan menimpa dict1. Tukarkan dengan cara lain.
EDIT: Ah, maaf, tidak melihatnya.
Hal ini dimungkinkan untuk dilakukan dalam satu ekspresi:
Sedikit perbaikan untuk jawaban @dietbuddha dengan pembongkaran kamus dari PEP 448 , bagi saya, lebih mudah dibaca dengan cara ini, juga, lebih cepat juga :
from functools import reduce
result_dict = reduce(lambda a, b:{**a,**b}, list_of_dicts)
Namun perlu diingat, ini hanya berfungsi dengan versi 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}>>>
Catatan Saya menambahkan pasangan kunci / nilai kedua ke kamus terakhir untuk menunjukkannya bekerja dengan banyak entri. Juga kunci dari dicts nanti dalam daftar akan menimpa kunci yang sama dari dikt sebelumnya.
Jawaban:
Ini berfungsi untuk kamus dengan panjang apa pun:
Sebagai pemahaman :
sumber
Dalam kasus Python 3.3+, ada
ChainMap
koleksi :Lihat juga:
sumber
Catatan: urutan 'b' dan 'c' tidak cocok dengan output Anda karena dicts tidak berurutan
jika dicts dapat memiliki lebih dari satu kunci / nilai
sumber
Untuk kamus datar, Anda dapat melakukan ini:
sumber
Ini mirip dengan @delnan tetapi menawarkan opsi untuk memodifikasi item k / v (key / value) dan saya yakin lebih mudah dibaca:
Misalnya, ganti elem k / v sebagai berikut:
membongkar k, v tuple dari kamus .items () generator setelah menarik objek dict dari daftar
sumber
Ini asimetris karena Anda perlu memilih apa yang harus dilakukan dengan kunci duplikat; dalam hal ini,
dict2
akan menimpadict1
. Tukarkan dengan cara lain.EDIT: Ah, maaf, tidak melihatnya.
Hal ini dimungkinkan untuk dilakukan dalam satu ekspresi:
Tidak ada kredit untuk saya untuk yang terakhir ini!
Namun, saya berpendapat bahwa mungkin lebih Pythonic (eksplisit> implisit, datar> bersarang) untuk melakukan ini dengan
for
loop sederhana . YMMV.sumber
Anda dapat menggunakan fungsi gabungan dari pustaka funcy :
sumber
Sedikit perbaikan untuk jawaban @dietbuddha dengan pembongkaran kamus dari PEP 448 , bagi saya, lebih mudah dibaca dengan cara ini, juga, lebih cepat juga :
Namun perlu diingat, ini hanya berfungsi dengan versi Python 3.5+.
sumber
Catatan Saya menambahkan pasangan kunci / nilai kedua ke kamus terakhir untuk menunjukkannya bekerja dengan banyak entri. Juga kunci dari dicts nanti dalam daftar akan menimpa kunci yang sama dari dikt sebelumnya.
sumber
dic1 = {'Maria': 12, 'Paco': 22, 'Jose': 23} dic2 = {'Patricia': 25, 'Marcos': 22 'Tomas': 36}
dic2 = dict (dic1.items () + dic2.items ())
dan ini akan menjadi hasilnya:
dic2 {'Jose': 23, 'Marcos': 22, 'Patricia': 25, 'Tomas': 36, 'Paco': 22, 'Maria': 12}
sumber