여러 개의 딕셔너리가 담긴 리스트에서 키별로 값을 그룹화한 뒤 누적 평균을 구해야 하는 경우가 자주 있습니다. 이 문제는 먼저 결과를 담을 빈 딕셔너리를 만든 뒤, 원본 리스트의 각 딕셔너리를 순회하면서 키와 값에 접근하는 방식으로 해결할 수 있습니다. 해당 키가 결과 딕셔너리에 이미 존재하면 값을 기존 리스트에 추가하고, 존재하지 않으면 새로운 키로 값을 저장합니다. 마지막으로 각 키의 값 목록에 statistics.mean() 메서드를 적용하면 누적 평균을 얻을 수 있습니다.
예제 코드
아래는 전체 과정을 보여주는 예제입니다.
from statistics import mean
my_list = [{'hi': 24, 'there': 81, 'how': 11},
{'hi': 16, 'how': 78, 'doing': 63}]
print('입력 리스트 :')
print(my_list)
my_result = dict()
for sub in my_list:
for key, val in sub.items():
if key in my_result:
my_result[key].append(val)
else:
my_result[key] = [val]
for key, my_val in my_result.items():
my_result[key] = mean(my_val)
print('계산 결과 :')
print(my_result)
출력 결과
입력 리스트 :
[{'hi': 24, 'there': 81, 'how': 11}, {'hi': 16, 'how': 78, 'doing': 63}]
계산 결과 :
{'hi': 20, 'there': 81, 'how': 44.5, 'doing': 63}
코드 설명
statistics모듈에서mean함수를 임포트합니다.여러 딕셔너리를 담은 리스트를 정의하고 콘솔에 출력합니다.
결과를 저장할 빈 딕셔너리를 하나 정의합니다.
원본 리스트를 순회하면서 각 딕셔너리의 키와 값을 가져옵니다.
해당 키가 결과 딕셔너리에 이미 있다면, 기존 리스트에 값을 추가(append)합니다.
키가 없다면 새로운 키를 만들고, 값을 리스트 형태로 저장합니다.
이후 결과 딕셔너리의 키와 값(리스트)을 다시 순회하면서
mean메서드로 평균을 구해 기존 값을 대체합니다.최종 결과를 콘솔에 출력합니다.
참고: defaultdict로 더 간결하게 작성하기
collections.defaultdict를 활용하면 키의 존재 여부를 매번 검사하지 않아도 되므로, 같은 로직을 더 짧고 읽기 쉽게 구현할 수 있습니다.
from collections import defaultdict
from statistics import mean
my_list = [{'hi': 24, 'there': 81, 'how': 11},
{'hi': 16, 'how': 78, 'doing': 63}]
grouped = defaultdict(list)
for sub in my_list:
for key, val in sub.items():
grouped[key].append(val)
result = {key: mean(vals) for key, vals in grouped.items()}
print(result) # {'hi': 20, 'there': 81, 'how': 44.5, 'doing': 63}
두 방법 모두 결과는 동일하며, 상황에 따라 가독성과 성능 면에서 유리한 방식을 선택해 사용하면 됩니다.