Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengemas kini Kamus Bersarang dalam Python sambil Mengekalkan Nilai Sedia Ada?

Bagaimana untuk Mengemas kini Kamus Bersarang dalam Python sambil Mengekalkan Nilai Sedia Ada?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-09 06:35:02710semak imbas

How to Update Nested Dictionaries in Python while Preserving Existing Values?

Mengemas kini Kamus Bersarang Mengekalkan Nilai Sedia Ada

Dalam Python, mengemas kini kamus dengan struktur bersarang boleh menjadi rumit, terutamanya apabila anda ingin menggabungkan nilai tanpa menimpa yang sedia ada. Soalan ini meneroka cara mengemas kini kamus kamus bersarang1 dengan kandungan kemas kini, sambil mengekalkan nilai dalam levelA.

Kecacatan dalam Pendekatan Asal

Kod Python yang diberikan menunjukkan kesilapan biasa:

dictionary1.update(update)

Kemas kini mudah ini tidak mengekalkan tahapA kerana kamus kemas kini diutamakan dan menimpa keseluruhan struktur di bawah tahap1.

Penyelesaian Rekursif

Penyelesaian yang disediakan dalam jawapan mencadangkan pendekatan rekursif yang melibatkan:

  1. Mengulang melalui kekunci dan nilai dalam kamus kemas kini.
  2. Jika nilai ialah pemetaan (kamus lain), panggil kemas kini secara rekursif pada sub-kamus yang sepadan dalam kamus asal.
  3. Jika tidak, kemas kini nilai seperti biasa.

Kod Kemas Kini

Berikut ialah kod yang dipertingkatkan berdasarkan cadangan jawapan:

def update(d, u):
    for k, v in u.items():
        if isinstance(v, collections.abc.Mapping):
            d[k] = update(d.get(k, {}), v)
        else:
            d[k] = v
    return d

dictionary1 = {
    "level1": {
        "level2": {"levelA": 0, "levelB": 1}
    }
}
update = {
    "level1": {
        "level2": {"levelB": 10}
    }
}
updated_dict = update(dictionary1, update)
print(updated_dict)

Output

{'level1': {'level2': {'levelA': 0, 'levelB': 10}}}

Penjelasan

Penyelesaian ini mengemas kini kamus bersarang secara rekursif, memelihara nilai levelA sedia ada sambil mengemas kini nilai di bawah levelB seperti yang dijangkakan.

Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini Kamus Bersarang dalam Python sambil Mengekalkan Nilai Sedia Ada?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn