Mana cara terbaik untuk memperluas kamus dengan kamus lain? Contohnya:
>>> a = { "a" : 1, "b" : 2 }
>>> b = { "c" : 3, "d" : 4 }
>>> a
{'a': 1, 'b': 2}
>>> b
{'c': 3, 'd': 4}
Saya mencari operasi apa pun untuk mendapatkan for
loop yang menghindari ini :
{ "a" : 1, "b" : 2, "c" : 3, "d" : 4 }
Saya ingin melakukan sesuatu seperti:
a.extend(b) # This does not work
python
dictionary
FerranB
sumber
sumber
Jawaban:
Dokumentasi Perpustakaan Standar Python Terbaru
sumber
{"a":2, "b":3}
dengan dict{"b":4, "c":5}
ke dict{"a":2, "b":3,"c":5}
? Tentu saja mungkin menggunakanupdate()
dengan memindahkan beberapa barang, tetapi akan lebih baik jika itu dapat dicapai hanya dalam satu baris ...update
diam - diam menimpa entri yang ada. Yaitu, nilai apa pun dalamb
menimpa merekaa
untuk tumpang tindih kunci.Permata indah dalam pertanyaan tertutup ini :
"Cara oneliner", yang tidak mengubah kedua input dicts, adalah
Pelajari apa
**basket_two
(yang**
) berarti di sini .Jika terjadi konflik, item dari
basket_two
akan menimpa item daribasket_one
. Saat one-liners berjalan, ini sangat mudah dibaca dan transparan, dan saya tidak memiliki komplain terhadap penggunaannya setiap kali sebuah dikt yang merupakan campuran dari dua lainnya sangat berguna (pembaca mana saja yang kesulitan memahaminya akan dilayani dengan sangat baik oleh cara ini mendorongnya untuk belajar tentangdict
dan**
formulir ;-). Jadi, misalnya, gunakan seperti:cukup sering terjadi dalam kode saya.
Awalnya dikirimkan oleh Alex Martelli
Catatan: Dalam Python 3, ini hanya akan berfungsi jika setiap kunci di basket_two adalah a
string
.sumber
dict
mudah ditemukan sementara**
sedikit lebih rumit (kata kunci kwargs ). Berikut ini penjelasan yang bagus: saltycrane.com/blog/2008/01/…basket_one.update(<dict>)
seperti namanya, memperbarui kamus yang ada (atau yang dikloning).**anotherdict
, harus berupa string.Sudahkah Anda mencoba menggunakan pemahaman kamus dengan pemetaan kamus:
Cara lain untuk melakukannya adalah dengan Menggunakan dict (iterable, ** kwarg)
Dalam Python 3.9 Anda dapat menambahkan dua dict menggunakan union | operator
sumber
Akan menambahkan kunci dan nilai dari b ke a , menimpa jika sudah ada nilai untuk kunci.
sumber
Seperti yang disebutkan orang lain,
a.update(b)
untuk beberapa diktea
danb
akan mencapai hasil yang Anda minta dalam pertanyaan Anda. Namun, saya ingin menunjukkan bahwa berkali-kali saya telah melihatextend
metode pemetaan / set objek keinginan bahwa dalam sintaksa.extend(b)
,a
nilai-nilai TIDAK boleh ditimpa olehb
nilai-nilai.a.update(b)
menimpaa
nilai-nilai, dan karenanya bukan pilihan yang baik untukextend
.Perhatikan bahwa beberapa bahasa memanggil metode ini
defaults
atauinject
, karena dapat dianggap sebagai cara menyuntikkan nilai-nilai b (yang mungkin merupakan seperangkat nilai default) ke kamus tanpa menimpa nilai-nilai yang mungkin sudah ada.Tentu saja, Anda dapat mencatat sederhana yang
a.extend(b)
hampir sama denganb.update(a); a=b
. Untuk menghapus tugas, Anda bisa melakukannya sebagai berikut:Terima kasih kepada Tom Leys untuk ide cerdasnya yang menggunakan
dict
konstruktor efek sampingextend
.sumber
Anda juga dapat menggunakan koleksi python.Chainmap yang diperkenalkan dengan python 3.3.
Ini memiliki beberapa kemungkinan keuntungan, tergantung pada kasus penggunaan Anda. Mereka dijelaskan secara lebih rinci di sini , tetapi saya akan memberikan tinjauan singkat:
Ini terutama berguna untuk hal-hal seperti kamus konfigurasi.
sumber
Jika Anda membutuhkannya sebagai Kelas , Anda dapat memperluasnya dengan dict dan menggunakan metode pembaruan :
sumber