Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Melakukan Gabungan Dalam Kamus Bersarang dalam Python?

Bagaimana untuk Melakukan Gabungan Dalam Kamus Bersarang dalam Python?

DDD
DDDasal
2024-12-04 02:03:10930semak imbas

How to Perform a Deep Merge of Nested Dictionaries in Python?

Gabungan Dalam Kamus Kamus dalam Python

Menggabungkan berbilang kamus dengan kekunci bersarang boleh menjadi tugas yang mencabar. Mari kita pertimbangkan contoh berikut:

dict1 = {
    1: {"a": {"A"}},
    2: {"b": {"B"}}
}

dict2 = {
    2: {"c": {"C"}},
    3: {"d": {"D"}}
}

Output yang diingini ialah:

dict3 = {
    1: {"a": {"A"}},
    2: {"b": {"B"}, "c": {"C"}},
    3: {"d": {"D"}}
}

Untuk mencapai gabungan dalam ini, kita boleh menggunakan fungsi rekursif:

def merge(a: dict, b: dict, path=[]):
    for key in b:
        if key in a:
            if isinstance(a[key], dict) and isinstance(b[key], dict):
                merge(a[key], b[key], path + [str(key)])
            else:
                a[key] = b[key]
        else:
            a[key] = b[key]

    return a

Fungsi ini mengambil dua kamus, a dan b, dan laluan yang menjejaki lokasi semasa dalam struktur bersarang. Ia berulang melalui kekunci dalam b dan menyemak sama ada kunci yang sepadan wujud dalam a. Jika nilai pada kunci itu ialah kedua-dua kamus, ia memanggil fungsi gabungan secara rekursif untuk menggabungkan sub-kamus tersebut. Jika tidak, ia mengemas kini nilai dalam a dengan nilai daripada b.

Untuk contoh dicts di atas, fungsi gabungan akan menghasilkan hasil yang diingini:

print(merge(dict1, dict2))

Outputnya ialah:

{
    1: {'a': {'A'}},
    2: {'b': {'B'}, 'c': {'C'}},
    3: {'d': {'D'}}
}

Nota: Fungsi ini mengubah kamus pertama, a. Jika anda ingin mengekalkan kandungannya, anda boleh membuat salinan sebelum digabungkan, cth., cantum(dict(a), b).

Atas ialah kandungan terperinci Bagaimana untuk Melakukan Gabungan Dalam Kamus Bersarang dalam Python?. 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