Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 중첩 딕셔너리를 재귀적으로 순회하는 방법

중첩 딕셔너리란?

딕셔너리의 값 자리에 또 다른 딕셔너리가 들어 있는 구조를 중첩 딕셔너리(nested dictionary)라고 합니다. 이런 구조는 설정 데이터나 계층형 JSON 데이터를 다룰 때 자주 등장하며, 일반적인 반복문만으로는 깊숙한 곳까지 한 번에 탐색하기 어렵습니다.

다음은 중첩된 딕셔너리 객체의 예입니다.

D1 = {1: {2: {3: 4, 5: 6}, 3: {4: 5, 6: 7}}, 2: {3: {4: 5}, 4: {6: 7}}}

재귀 함수로 중첩 딕셔너리 순회하기

중첩 딕셔너리를 완전히 탐색하는 가장 간단한 방법은 재귀 함수를 사용하는 것입니다. 각 항목의 값을 검사해서 그 값이 딕셔너리이면 같은 함수를 다시 호출하고, 딕셔너리가 아니면 키와 값을 출력하는 방식입니다.

def iterdict(d):
    for k, v in d.items():
        if isinstance(v, dict):
            iterdict(v)
        else:
            print(k, ":", v)

iterdict(D1)

동작 원리

1. items() 메서드로 딕셔너리의 모든 키-값 쌍을 하나씩 꺼냅니다.
2. isinstance(v, dict) 조건으로 값이 딕셔너리인지 확인합니다.
3. 값이 딕셔너리라면 iterdict()를 재귀 호출하여 더 깊은 단계를 계속 탐색합니다.
4. 값이 딕셔너리가 아니면 해당 키와 값을 화면에 출력합니다.

이처럼 재귀 호출을 활용하면 딕셔너리가 몇 겺으로 중첩되어 있더라도 가장 안쪽의 실제 값까지 빠짐없이 방문할 수 있습니다.

출력 결과

최초의 딕셔너리 객체를 이 함수에 전달하면 모든 키-값 쌍이 순서대로 탐색되며, 실행 결과는 다음과 같습니다.

3 : 4
5 : 6
4 : 5
6 : 7
4 : 5
6 : 7

출력 결과를 보면 최상위 키(1, 2)는 나타나지 않는데, 이는 해당 키의 값이 딕셔너리여서 출력 대신 재귀 호출로 넘어갔기 때문입니다. 최종적으로 리프 노드에 해당하는 키-값 쌍들만 화면에 표시됩니다.