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

Python 튜플 리스트 그룹화 합계 구하기: dict와 Counter 활용법

개요

이번 튜토리얼에서는 서로 다른 리스트에 흩어져 있는 튜플들을 키를 기준으로 그룹화하여, 같은 키를 가진 값들을 모두 합산하는 프로그램을 작성해 보겠습니다.

예를 들어 아래와 같이 두 개의 리스트가 있을 때,

list_one = [('a', 2), ('b', 3), ('c', 5)]
list_two = [('c', 7), ('a', 4), ('b', 2)]

키 'a', 'b', 'c'별로 값을 각각 더하면 다음과 같은 결과를 얻을 수 있습니다.

[('a', 6), ('b', 5), ('c', 12)]

방법 1: 딕셔너리 활용

문제 해결 단계

  • 두 개의 리스트를 초기화합니다.
  • dict() 함수를 사용해 첫 번째 리스트를 딕셔너리로 변환합니다.
  • 두 번째 리스트를 순회하면서, 해당 키가 딕셔너리에 존재하면 기존 값에 새 값을 누적해 더합니다.
  • 최종 결과를 출력합니다.

코드 예제

# 리스트 초기화
list_one = [('a', 2), ('b', 3), ('c', 5)]
list_two = [('c', 7), ('a', 4), ('b', 2)]

# list_one을 딕셔너리로 변환
result = dict(list_one)

# 두 번째 리스트 순회
for tup in list_two:
    # 딕셔너리에 해당 키가 있는지 확인
    if tup[0] in result:
        result[tup[0]] = result.get(tup[0]) + tup[1]

# 결과를 튜플 리스트 형태로 출력
print(list(result.items()))

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

[('a', 6), ('b', 5), ('c', 12)]

방법 2: collections.Counter 활용

리스트를 일일이 순회하지 않고도 collections 모듈의 Counter를 사용하면 같은 문제를 훨씬 간결하게 해결할 수 있습니다. Counter 객체끼리 + 연산자를 적용하면 동일한 키의 값들이 자동으로 합산되기 때문입니다.

코드 예제

# Counter 임포트
from collections import Counter

# 리스트 초기화
list_one = [('a', 2), ('b', 3), ('c', 5)]
list_two = [('c', 7), ('a', 4), ('b', 2)]

# Counter 객체끼리 더해 결과 계산
result = Counter(dict(list_one)) + Counter(dict(list_two))

# 결과를 튜플 리스트 형태로 출력
print(list(result.items()))

실행 결과

위 코드를 실행하면 동일한 결과를 확인할 수 있습니다.

[('a', 6), ('b', 5), ('c', 12)]

마무리

지금까지 파이썬에서 키가 같은 튜플 값들을 그룹화해 합산하는 두 가지 방법을 살펴보았습니다. 데이터 구조를 직접 제어하고 싶다면 딕셔너리 방식이 적합하고, 코드를 더 짧고 읽기 쉽게 유지하고 싶다면 Counter를 활용하는 것이 좋습니다. 튜토리얼 내용에 대해 궁금한 점이 있다면 댓글로 남겨주세요!