파이썬에서 중첩된(nested) 딕셔너리의 전체 요소 개수를 구해야 할 때가 있습니다. 이 글에서는 items() 메서드와 sum() 함수를 활용해 중첩 딕셔너리의 모든 요소를 손쉽게 계산하는 방법을 알아보겠습니다.
items() 메서드로 키-값 쌍 순회하기
딕셔너리의 각 키-값(key-value) 쌍은 다음 표현식으로 순회(iterate)할 수 있습니다.
for k,v in students.items():
중첩된 파이썬 딕셔너리에서는 각 항목의 값(value) 자체가 또 하나의 딕셔너리입니다. 따라서 각 하위 딕셔너리의 길이는 len(v)로 구할 수 있으며, 루프를 돌면서 이 값을 누적 합산하면 전체 요소의 개수를 얻을 수 있습니다.
>>> students={"student1":{"name":"Raaj", "age":23, "subjects":["Phy", "Che", "maths"],"GPA":8.5},"student2":{"name":"Kiran", "age":21, "subjects":["Phy", "Che", "bio"],"GPA":8.25}}
>>> s=0
>>> for k,v in students.items():
s=s+len(v)실행 결과를 확인해 보면 다음과 같습니다.
>>> s 8
여기서 결과가 8인 이유는, 각 학생(student1, student2)의 하위 딕셔너리에 name, age, subjects, GPA라는 4개의 키가 있고, 학생이 두 명이므로 4 × 2 = 8개의 요소가 되기 때문입니다.
sum() 함수로 더 간결하게 표현하기
위의 루프 코드는 제너레이터 표현식(generator expression)을 사용하면 한 줄로 더 간결하게 작성할 수 있습니다.
>>> sum(len(v)for v in students.values()) 8
students.values()로 각 하위 딕셔너리를 가져온 뒤 len(v)로 길이를 구하고, sum()으로 모두 더하는 방식입니다. 별도의 변수나 반복문 없이 동일한 결과를 얻을 수 있어 실무에서 가독성 좋게 자주 활용됩니다.