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

Python – 딕셔너리 키별 누적 평균 구하는 방법

여러 개의 딕셔너리가 담긴 리스트에서 키별로 값을 그룹화한 뒤 누적 평균을 구해야 하는 경우가 자주 있습니다. 이 문제는 먼저 결과를 담을 빈 딕셔너리를 만든 뒤, 원본 리스트의 각 딕셔너리를 순회하면서 키와 값에 접근하는 방식으로 해결할 수 있습니다. 해당 키가 결과 딕셔너리에 이미 존재하면 값을 기존 리스트에 추가하고, 존재하지 않으면 새로운 키로 값을 저장합니다. 마지막으로 각 키의 값 목록에 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}

두 방법 모두 결과는 동일하며, 상황에 따라 가독성과 성능 면에서 유리한 방식을 선택해 사용하면 됩니다.