Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Cekap Mengakses dan Mengubah Suai Item Kamus Bersarang Menggunakan Senarai Utama dalam Python?
Mengakses Item Kamus Bersarang dengan Senarai Utama
Apabila berurusan dengan struktur kamus yang kompleks, melintasinya untuk mengakses item tertentu boleh menjadi cabaran biasa . Mencari pendekatan yang cekap dan fleksibel untuk menavigasi kamus ini adalah penting.
Pertimbangkan senario di mana anda mempunyai kamus bersarang seperti:
dataDict = { "a": { "r": 1, "s": 2, "t": 3 }, "b": { "u": 1, "v": { "x": 1, "y": 2, "z": 3 }, "w": 3 } }
Anda mungkin perlu mengakses item ini menggunakan senarai kekunci, seperti ["a", "r"] atau ["b", "v", "y"]. Walaupun pendekatan di bawah mungkin berfungsi:
# Get a given data from a dictionary with position provided as a list def getFromDict(dataDict, mapList): for k in mapList: dataDict = dataDict[k] return dataDict
Terdapat kaedah yang lebih cekap menggunakan Python's reduce():
from functools import reduce # forward compatibility for Python 3 import operator def getFromDict(dataDict, mapList): return reduce(operator.getitem, mapList, dataDict)
Kaedah yang dipertingkatkan ini menggunakan pengurangan untuk melintasi kamus, menggunakan operator .getitem berfungsi untuk mengakses setiap item bersarang menggunakan senarai kunci.
Untuk menetapkan nilai, kita boleh memanfaatkan getFromDict untuk mencari kamus 'ibu bapa' yang betul dan kemudian tetapkan nilai:
def setInDict(dataDict, mapList, value): getFromDict(dataDict, mapList[:-1])[mapList[-1]] = value
Kaedah ini dengan cekap melintasi kamus ke lokasi yang sesuai dalam struktur data dan mengemas kini nilai.
Akhir sekali, kita boleh sediakan nama fungsi snake_case dan lanjutkan fungsi ini untuk berfungsi dengan jenis data bercampur, menghasilkan:
from functools import reduce # forward compatibility for Python 3 import operator def get_by_path(root, items): return reduce(operator.getitem, items, root) def set_by_path(root, items, value): get_by_path(root, items[:-1])[items[-1]] = value def del_by_path(root, items): del get_by_path(root, items[:-1])[items[-1]]
Fungsi ini menyediakan utiliti serba boleh untuk menavigasi dan memanipulasi kamus bersarang, senarai atau gabungan kedua-duanya.
Atas ialah kandungan terperinci Bagaimana untuk Cekap Mengakses dan Mengubah Suai Item Kamus Bersarang Menggunakan Senarai Utama dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!