Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Cekap Mengakses dan Mengubah Suai Item Kamus Bersarang Menggunakan Senarai Utama dalam Python?

Bagaimana untuk Cekap Mengakses dan Mengubah Suai Item Kamus Bersarang Menggunakan Senarai Utama dalam Python?

Barbara Streisand
Barbara Streisandasal
2024-12-18 16:47:14216semak imbas

How to Efficiently Access and Modify Nested Dictionary Items Using a Key List in 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!

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