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

파이썬 딕셔너리 중첩 깊이 계산하는 2가지 방법

파이썬에서 딕셔너리(dictionary)는 다른 딕셔너리를 값으로 가질 수 있습니다. 이처럼 딕셔너리 안에 딕셔너리가 여러 겹으로 들어 있는 구조를 중첩 딕셔너리(nested dictionary)라고 부릅니다.

이 글에서는 중첩된 딕셔너리가 몇 단계까지 중첩되어 있는지, 즉 딕셔너리의 깊이(depth)를 계산하는 두 가지 방법을 살펴보겠습니다.

방법 1: 문자열 변환 활용하기

가장 간단한 접근 방식은 딕셔너리 전체를 문자열로 변환한 뒤, 여는 중괄호 {가 등장하는 횟수를 세는 것입니다. 중괄호 하나가 열릴 때마다 새로운 딕셔너리 레벨이 시작되기 때문에, 그 개수가 곧 중첩 깊이가 됩니다.

예제 코드

dictA = {1: 'Sun', 2: {3: {4:'Mon'}}}
dictStr = str(dictA)
cnt = 0
for i in dictStr :
    if i == "{":
        cnt += 1
print("The depth of dictionary: ",cnt)

실행 결과

The depth of dictionary: 3

위 예제에서 dictA는 최대 3단계까지 중첩되어 있으므로 깊이가 3으로 출력됩니다.

방법 2: 재귀 함수 활용하기

두 번째 방법은 재귀(recursion)를 사용하는 것입니다. 함수가 자기 자신을 호출하면서 딕셔너리의 각 값을 검사하고, 값이 딕셔너리인 동안에는 계속 자신을 호출하여 깊이를 누적합니다. 더 이상 딕셔너리가 아니면 0을 반환하며 재귀가 종료됩니다.

예제 코드

def finddepth(dictA):
    if isinstance(dictA, dict):
        return 1 + (max(map(finddepth, dictA.values())) if dictA else 0)
    return 0

dictA = {1: 'Sun', 2: {3: {4:'Mon'}}}
print("The depth of dictionary: ",finddepth(dictA))

실행 결과

The depth of dictionary: 3

정리

문자열 변환 방식은 구현이 매우 간단하지만, 키나 값에 중괄호 문자가 포함되어 있으면 잘못된 결과를 낼 수 있다는 한계가 있습니다. 반면 재귀 함수 방식은 실제 자료구조를 직접 순회하기 때문에 더 정확하고 안정적으로 깊이를 계산할 수 있습니다. 상황에 맞게 적절한 방법을 선택해 사용하시기 바랍니다.