파이썬에서 중첩된(nested) 딕셔너리의 값을 접근할 때, 가장 간단하고 가독성이 좋은 방법은 for 반복문을 활용하는 것입니다. 키 목록(key list)을 순서대로 순회하면서 각 단계마다 다음 값을 가져오고, 마지막에 도달하면 원하는 값을 반환합니다.
예제 코드
아래 예제는 키 경로를 리스트로 전달받아 중첩된 딕셔너리의 값을 추출하는 함수입니다.
def getFromDict(dataDict, mapList):
for k in mapList:
dataDict = dataDict[k]
return dataDict
a = {
'foo': 45,
'bar': {
'baz': 100,
'tru': "Hello"
}
}
print(getFromDict(a, ["bar", "baz"]))실행 결과
위 코드를 실행하면 다음과 같은 출력이 나타납니다.
100
동작 원리
이 함수가 작동하는 방식은 다음과 같습니다.
1. ["bar", "baz"]라는 키 리스트가 전달됩니다.
2. 첫 번째 반복에서 dataDict는 a["bar"], 즉 내부 딕셔너리 {'baz': 100, 'tru': "Hello"}로 대체됩니다.
3. 두 번째 반복에서 dataDict는 a["bar"]["baz"], 즉 100이 됩니다.
4. 반복이 끝나면 최종 값 100이 반환됩니다.
참고: functools.reduce를 활용한 방법
같은 로직을 functools.reduce를 사용해 한 줄로 표현할 수도 있습니다.
from functools import reduce
import operator
def getFromDict(dataDict, mapList):
return reduce(operator.getitem, mapList, dataDict)두 방법 모두 결과는 동일하지만, 초보자에게는 for 반복문 방식이 더 직관적이고 이해하기 쉽습니다.