파이썬에서는 딕셔너리의 키-값 쌍 중 값(value) 자체가 리스트로 구성된 경우가 종종 있습니다. 예를 들어 요일 목록이나 과목 목록처럼 여러 데이터를 하나의 키에 담아야 할 때 유용합니다. 이 글에서는 이렇게 딕셔너리 값으로 저장된 리스트에 포함된 항목의 개수를 세는 대표적인 세 가지 방법을 예제와 함께 살펴봅니다.
1. isinstance 함수 활용하기
가장 기본적인 방법은 isinstance() 함수를 사용하는 것입니다. 딕셔너리를 순회하면서 각 값이 리스트인지 검사하고, 리스트라면 해당 리스트의 길이만큼 카운트를 증가시킵니다.
예제 코드
# 딕셔너리 정의
Adict = {'Days': ["Mon","Tue","wed","Thu"],
'time': "2 pm",
'Subjects':["Phy","Chem","Maths","Bio"]
}
print("주어진 딕셔너리:\n", Adict)
count = 0
# isinstance 사용
for x in Adict:
if isinstance(Adict[x], list):
count += len(Adict[x])
print("리스트 내 항목 수:\n", count)실행 결과
주어진 딕셔너리:
{'Days': ['Mon', 'Tue', 'wed', 'Thu'], 'time': '2 pm', 'Subjects': ['Phy', 'Chem', 'Maths', 'Bio']}
리스트 내 항목 수:
8위 예제에서 'Days' 리스트에는 4개, 'Subjects' 리스트에는 4개의 항목이 있으므로 최종 결과는 8이 됩니다. 문자열인 'time' 값은 리스트가 아니므로 카운트에서 제외됩니다.
2. items() 메서드 활용하기
items() 메서드를 사용하면 딕셔너리의 키와 값을 동시에 꺼내며 순회할 수 있어 코드가 더 직관적입니다. 각 값에 대해 isinstance()로 리스트 여부를 판별하는 방식은 동일합니다.
예제 코드
# 딕셔너리 정의
Adict = {'Days': ["Mon","Tue","wed","Thu"],
'time': "2 pm",
'Subjects':["Phy","Chem","Maths","Bio"]
}
print("주어진 딕셔너리:\n", Adict)
count = 0
# .items() 사용
for key, value in Adict.items():
if isinstance(value, list):
count += len(value)
print("리스트 내 항목 수:\n", count)실행 결과
주어진 딕셔너리:
{'Days': ['Mon', 'Tue', 'wed', 'Thu'], 'time': '2 pm', 'Subjects': ['Phy', 'Chem', 'Maths', 'Bio']}
리스트 내 항목 수:
83. enumerate 함수 활용하기
enumerate() 함수도 딕셔너리의 항목을 인덱스와 함께 나열할 때 사용할 수 있습니다. 이 경우 각 항목이 (인덱스, (키, 값)) 형태의 튜플로 반환되므로, x[1][1]로 실제 값에 접근한 뒤 리스트 여부를 확인합니다.
예제 코드
# 딕셔너리 정의
Adict = {'Days': ["Mon","Tue","wed","Thu"],
'time': "2 pm",
'Subjects':["Phy","Chem","Maths","Bio"]
}
print("주어진 딕셔너리:\n", Adict)
count = 0
for x in enumerate(Adict.items()):
if isinstance(x[1][1], list):
count += len(x[1][1])
print("리스트 내 항목 수:\n", count)실행 결과
주어진 딕셔너리:
{'Days': ['Mon', 'Tue', 'wed', 'Thu'], 'time': '2 pm', 'Subjects': ['Phy', 'Chem', 'Maths', 'Bio']}
리스트 내 항목 수:
8정리 및 추천 방법
세 가지 방법 모두 동일한 결과를 출력하지만, 가독성과 실용성 측면에서는 items() 메서드를 활용한 두 번째 방법이 가장 권장됩니다. 키와 값을 명확하게 분리해서 다룰 수 있고, 인덱스 연산이 없어 실수 가능성도 낮습니다. 반면 enumerate() 방식은 인덱스 정보가 함께 필요한 경우에만 선택하는 것이 좋습니다.