Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengemas kini Kamus Bersarang dalam Python Tanpa Mengganti Kekunci Perantaraan?

Bagaimana untuk Mengemas kini Kamus Bersarang dalam Python Tanpa Mengganti Kekunci Perantaraan?

Patricia Arquette
Patricia Arquetteasal
2024-11-06 21:54:02410semak imbas

How to Update Nested Dictionaries in Python Without Overwriting Intermediate Keys?

Mengemas kini Kamus Bersarang Tanpa Mengganti Kekunci Perantara

Apabila bekerja dengan kamus bersarang, selalunya perlu mengemas kini kunci tertentu tanpa menjejaskan tahap lain. Walau bagaimanapun, kaedah kemas kini standard dalam Python menimpa semua kunci pada tahap yang sama, menjadikannya mencabar untuk mencapai matlamat ini.

Pendekatan Rekursif

Pendekatan rekursif boleh menangani isu ini dengan berkesan. Dengan merentasi kamus secara rekursif, kami boleh mengenal pasti dan mengemas kini kunci pada kedalaman yang sesuai sambil mengekalkan struktur sedia ada.

Sebagai contoh, fungsi rekursif berikut boleh digunakan untuk mengemas kini kandungan kemas kini ke dalam kamus1 tanpa menulis ganti levelA:

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

Dalam fungsi ini, kami menyemak sama ada v ialah kamus dan secara rekursif memanggil kemas kini dengan sub-kamus yang sesuai. Jika v bukan kamus, kami hanya mengemas kini kunci yang sepadan dalam d. Ini memastikan bahawa kunci perantaraan tidak ditimpa.

Contoh Penggunaan

Pertimbangkan contoh berikut:

dictionary1 = {
    "level1": {
        "level2": {"levelA": 0, "levelB": 1}
    }
}
update = {
    "level1": {
        "level2": {"levelB": 10}
    }
}

updated_dictionary = update(dictionary1, update)
print(updated_dictionary)

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

Seperti yang anda lihat, levelA disimpan dalam kamus yang dikemas kini, walaupun kemas kini mengandungi nilai untuk levelB. Ini menunjukkan keberkesanan pendekatan rekursif.

Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini Kamus Bersarang dalam Python Tanpa Mengganti Kekunci Perantaraan?. 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