Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengemas kini Kamus Bersarang dalam Python Sambil Mengekalkan Nilai Tertentu pada Kedalaman Berbeza?
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:
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!