Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengemas kini Kamus Bersarang dalam Python Sambil Mengekalkan Nilai Tertentu pada Kedalaman Berbeza?

Bagaimana untuk Mengemas kini Kamus Bersarang dalam Python Sambil Mengekalkan Nilai Tertentu pada Kedalaman Berbeza?

Linda Hamilton
Linda Hamiltonasal
2024-11-12 03:58:021080semak imbas

How to Update a Nested Dictionary in Python While Preserving Specific Values at Different Depths?

Kemas Kini Kamus Bersarang dengan Pemeliharaan Kedalaman

Dalam Python, mengemas kini kamus bersarang boleh menjadi rumit, terutamanya apabila anda ingin menggabungkan kandungannya dengan kamus lain sambil mengekalkan nilai tertentu pada kedalaman yang berbeza. Pertimbangkan senario berikut:

Memandangkan dua kamus, kamus1 dan kemas kini, bagaimana kita boleh mengemas kini kamus1 dengan kandungan kemas kini tanpa menulis ganti nilai tertentu pada tahap paling dalam (cth., "levelA") sambil mengemas kini semua nilai lain ?

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

Jika kita hanya menggunakan kaedah kemas kini, ia akan menimpa keseluruhan subkamus "level2", kehilangan nilai "levelA":

dictionary1.update(update)
print(dictionary1)
{
    "level1": {
        "level2": {"levelB": 10}
    }
}

Untuk menangani cabaran ini , kami memerlukan penyelesaian rekursif yang mempertimbangkan kedalaman pembolehubah kamus dan menggabungkan nilai dengan sewajarnya.

Penyelesaian Rekursif:

Kod berikut melaksanakan "kemas kini separa" rekursif fungsi yang mengemas kini nilai kamus tanpa menulis ganti kekunci yang ditentukan:

import copy

def partial_update(d, u, preserve):
    for k, v in u.items():
        if isinstance(v, dict):
            if d.get(k, None) is None:
                d[k] = copy.deepcopy(v)
            else:
                partial_update(d[k], v, preserve)
        elif k in preserve:
            continue
        else:
            d[k] = copy.deepcopy(v)
    return d

Fungsi kemas kini separa mengambil tiga argumen:

  • d: Kamus untuk dikemas kini
  • u: The kamus yang mengandungi kemas kini
  • pelihara: Senarai kunci untuk dipelihara daripada ditulis ganti

Untuk mengekalkan nilai "levelA" dalam contoh kami, kami boleh menggunakan kod berikut:

partial_update(dictionary1, update, ["levelA"])
print(dictionary1)
{
    "level1": {
        "level2": {"levelA": 0, "levelB": 10}
    }
}

Dalam penyelesaian ini, kami membuat salinan kamus sebelum mengemas kini untuk mengelakkan pengubahsuaian yang tidak dijangka. Ini memastikan bahawa kamus asal kekal utuh walaupun selepas kemas kini separa.

Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini Kamus Bersarang dalam Python Sambil Mengekalkan Nilai Tertentu pada Kedalaman Berbeza?. 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