Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Mengakses dan Mengubah Suai Data dengan Cekap dalam Kamus Python Bersarang Menggunakan Senarai Kekunci?

Bagaimanakah Saya Boleh Mengakses dan Mengubah Suai Data dengan Cekap dalam Kamus Python Bersarang Menggunakan Senarai Kekunci?

DDD
DDDasal
2024-12-23 08:38:16841semak imbas

How Can I Efficiently Access and Modify Data in Nested Python Dictionaries Using a List of Keys?

Menavigasi Kamus Bersarang dengan Senarai Kekunci

Masalah:

Bagaimanakah kita boleh mengakses dan memanipulasi data dengan cekap dalam struktur kamus bersarang dalam menggunakan senarai kekunci?

Penyelesaian:

Fungsi Python asli functools.reduce boleh digunakan untuk melintasi kamus dengan cekap dalam satu lulus.

Pelaksanaan:

from functools import reduce
import operator

def get_by_path(root, items):
    """Access a nested object in root by item sequence."""
    return reduce(operator.getitem, items, root)

Penggunaan:

Untuk mendapatkan semula nilai pada laluan yang ditentukan, gunakan get_by_path :

dataDict = {
    "a": {
        "r": 1,
        "s": 2,
        "t": 3
    },
    "b": {
        "u": 1,
        "v": {
            "x": 1,
            "y": 2,
            "z": 3
        },
        "w": 3
    }
}

maplist = ["a", "r"]
value = get_by_path(dataDict, maplist)  # 1

Tetapan Nilai:

Untuk menetapkan nilai pada laluan tertentu, kita boleh menggunakan semula get_by_path untuk mencari kamus induk dan menetapkan nilai kepada kunci yang dikehendaki:

def set_by_path(root, items, value):
    """Set a value in a nested object in root by item sequence."""
    get_by_path(root, items[:-1])[items[-1]] = value

Penggunaan:

maplist = ["b", "v", "w"]
set_by_path(dataDict, maplist, 4)

Tambahan Kefungsian:

Untuk kesempurnaan, kami juga boleh mentakrifkan fungsi untuk memadamkan pasangan nilai kunci dalam kamus bersarang:

def del_by_path(root, items):
    """Delete a key-value in a nested object in root by item sequence."""
    del get_by_path(root, items[:-1])[items[-1]]

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses dan Mengubah Suai Data dengan Cekap dalam Kamus Python Bersarang Menggunakan Senarai Kekunci?. 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