>백엔드 개발 >파이썬 튜토리얼 >Python에서 키 목록을 사용하여 중첩된 사전 항목에 효율적으로 액세스하고 수정하려면 어떻게 해야 합니까?

Python에서 키 목록을 사용하여 중첩된 사전 항목에 효율적으로 액세스하고 수정하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-16 02:33:10966검색

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

키 목록을 통해 중첩된 사전 항목 액세스: 중첩 구조 탐색

사전과 같은 복잡한 데이터 구조에는 탐색 및 조작을 위한 효율적인 방법이 필요한 경우가 많습니다. 중첩된 콘텐츠. 일반적인 과제 중 하나는 제공된 키 목록을 기반으로 중첩된 구조 내의 특정 항목에 액세스하는 것입니다.

기존 접근 방식

이를 해결하는 한 가지 방법은 목록의 각 키를 사용하여 원하는 항목을 찾습니다. 그러나 이 접근 방식은 깊이 중첩된 구조의 경우 점점 장황해지고 오류가 발생하기 쉽습니다.

Reduce를 사용하여 개선된 솔루션

더 우아하고 효율적인 솔루션은 Python의 Reduce를 활용하는 것입니다. () 기능. Reduce()는 지정된 작업을 요소 시퀀스에 반복적으로 적용하여 시퀀스를 단일 값으로 줄입니다. Operator.getitem을 작업으로 활용하면 목록의 각 키를 사용하여 사전을 탐색하여 관련 값을 검색할 수 있습니다.

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

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

값 설정

사전 내의 값을 수정하는 데에도 동일한 원칙을 적용할 수 있습니다. get_from_dict를 사용하여 상위 사전과 최종 키를 찾으면 새 값을 직접 할당할 수 있습니다.

def set_in_dict(dataDict, mapList, value):
    get_from_dict(dataDict, mapList[:-1])[mapList[-1]] = value

추가 기능

핵심 기능을 확장하면, 중첩된 구조를 삭제하고 조작하기 위한 추가 기능을 만들 수 있습니다. 예를 들어, 키를 삭제하는 함수:

def del_by_path(root, items):
    del get_from_path(root, items[:-1])[items[-1]]

전체 예

다음은 전체 코드 데모입니다.

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

maplist = ["a", "r"]
print(get_from_dict(dataDict, maplist))  # Output: 1

maplist = ["b", "v", "y"]
print(get_from_dict(dataDict, maplist))  # Output: 2

set_in_dict(dataDict, ["b", "v", "w"], 4)

print(dataDict)  # Output: {'a': {'r': 1, 's': 2, 't': 3}, 'b': {'u': 1, 'v': {'w': 4, 'x': 1, 'y': 2, 'z': 3}, 'w': 3}}

이 향상된 접근 방식은 키 목록을 사용하여 복잡한 중첩 사전 구조를 탐색하고 수정하는 간결하고 효율적인 방법을 제공하여 유연성과 코드를 제공합니다. 가독성.

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

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