>백엔드 개발 >파이썬 튜토리얼 >Python에서 키 목록을 사용하여 중첩된 사전 항목에 효율적으로 액세스하고 수정하는 방법은 무엇입니까?

Python에서 키 목록을 사용하여 중첩된 사전 항목에 효율적으로 액세스하고 수정하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-18 16:47:14216검색

How to Efficiently Access and Modify Nested Dictionary Items Using a Key List in Python?

키 목록을 사용하여 중첩된 사전 항목에 액세스

복잡한 사전 구조를 다룰 때 특정 항목에 액세스하기 위해 이를 순회하는 것이 일반적인 문제일 수 있습니다. . 이러한 사전을 탐색하기 위한 효율적이고 유연한 접근 방식을 찾는 것이 중요합니다.

다음과 같은 중첩 사전이 있는 시나리오를 고려해보세요.

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

다음 목록을 사용하여 이러한 항목에 액세스해야 할 수도 있습니다. ["a", "r"] 또는 ["b", "v", "y"]와 같은 키. 아래 접근 방식이 작동할 수 있지만:

# 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

Python의 축소()를 사용하는 더 효율적인 방법이 있습니다.

from functools import reduce  # forward compatibility for Python 3
import operator

def getFromDict(dataDict, mapList):
    return reduce(operator.getitem, mapList, dataDict)

이 개선된 방법은 연산자를 사용하여 사전을 탐색하기 위해 축소를 활용합니다. .getitem 함수를 사용하면 키 목록을 사용하여 중첩된 각 항목에 액세스할 수 있습니다.

값을 설정하려면 getFromDict를 활용하여 올바른 항목을 찾을 수 있습니다. '부모' 사전을 지정한 다음 값을 할당합니다.

def setInDict(dataDict, mapList, value):
    getFromDict(dataDict, mapList[:-1])[mapList[-1]] = value

이 방법은 사전을 데이터 구조의 적절한 위치로 효율적으로 순회하고 값을 업데이트합니다.

마지막으로 snake_case를 제공할 수 있습니다. 함수 이름을 지정하고 이러한 함수를 확장하여 혼합 데이터 유형과 함께 작동하면 다음과 같은 결과가 발생합니다.

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]]

이러한 함수는 탐색을 위한 다양한 유틸리티를 제공합니다. 중첩된 사전, 목록 또는 이 둘의 혼합을 조작합니다.

위 내용은 Python에서 키 목록을 사용하여 중첩된 사전 항목에 효율적으로 액세스하고 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.