키 목록을 사용하여 중첩된 사전 항목에 액세스
복잡한 사전 구조를 다룰 때 특정 항목에 액세스하기 위해 이를 순회하는 것이 일반적인 문제일 수 있습니다. . 이러한 사전을 탐색하기 위한 효율적이고 유연한 접근 방식을 찾는 것이 중요합니다.
다음과 같은 중첩 사전이 있는 시나리오를 고려해보세요.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!