이 튜토리얼에서는 리스트에 있는 튜플들을 첫 번째 요소가 같은 것끼리 하나로 묶는 프로그램을 작성해 보겠습니다. 먼저 예시를 통해 문제를 명확히 이해해 보겠습니다.
입력 예시
[(1, 2, 3), (1, 4, 5), (3, 4, 1), (3, 4, 2)]
출력 결과
[(1, 2, 3, 4, 5), (3, 4, 1, 4, 2)]
위 예시처럼 첫 번째 요소가 1인 튜플 두 개와 첫 번째 요소가 3인 튜플 두 개가 각각 하나의 튜플로 병합되는 것을 확인할 수 있습니다.
문제 해결 절차
- 튜플이 담긴 리스트를 초기화합니다.
- 결과를 저장할 빈 딕셔너리(dictionary)를 생성합니다.
- 리스트의 튜플들을 순회(iterate)합니다.
- 현재 튜플의 첫 번째 요소가 딕셔너리의 키(key)로 존재하는지 확인합니다.
- 키가 이미 존재하면, 기존 값 뒤에 현재 튜플의 첫 번째 요소를 제외한 나머지 값들을 이어 붙입니다.
- 키가 존재하지 않으면, 첫 번째 요소를 포함한 전체 튜플을 해당 키의 값으로 저장합니다.
- 마지막으로 딕셔너리의 값(value)들을 리스트로 변환하여 출력합니다.
구현 코드
# 리스트 초기화
tuples = [(1, 2, 3), (1, 4, 5), (3, 4, 1), (3, 4, 2)]
# 빈 딕셔너리 생성
result = {}
# 튜플 리스트 순회
for sub_tuple in tuples:
# 첫 번째 요소가 result의 키로 존재하는지 확인
if sub_tuple[0] in result:
# 첫 번째 요소를 제외한 나머지 값을 기존 값에 추가
result[sub_tuple[0]] = (*result[sub_tuple[0]], *sub_tuple[1:])
else:
# 새로운 키로 튜플 전체를 저장
result[sub_tuple[0]] = sub_tuple
# 딕셔너리의 값을 리스트로 출력
print(list(result.values()))실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
[(1, 2, 3, 4, 5), (3, 4, 1, 4, 2)]
추가 팁: collections.defaultdict 활용하기
위 방식 외에도 파이썬의 collections.defaultdict를 사용하면 코드를 더 간결하게 작성할 수 있습니다.
from collections import defaultdict
tuples = [(1, 2, 3), (1, 4, 5), (3, 4, 1), (3, 4, 2)]
result = defaultdict(tuple)
for sub_tuple in tuples:
result[sub_tuple[0]] += sub_tuple[1:] if sub_tuple[0] in result else sub_tuple
print(list(result.values()))마무리
이번 튜토리얼에서는 딕셔너리를 활용해 첫 번째 요소가 같은 튜플들을 효율적으로 그룹화하는 방법을 알아보았습니다. 같은 문제를 다양한 방식으로 직접 구현해 보면서 이해를 깊게 다져 보시기 바랍니다. 튜토리얼 내용 중 궁금한 점이 있다면 댓글로 남겨 주세요.