Python에서 튜플로 이루어진 리스트를 외부에서 정의한 리스트의 순서에 맞춰 정렬해야 하는 경우가 있습니다. 예를 들어, 데이터베이스 조회 결과나 API 응답 데이터가 특정 기준 순서와 일치하도록 재배열해야 할 때 유용합니다.
이럴 때 리스트 컴프리헨션(list comprehension)과 dict() 함수를 함께 사용하면 간단하게 해결할 수 있습니다.
예제 코드
my_list = [('Mark', 34), ('Will', 91), ('Rob', 23)]
print("튜플 리스트 : ")
print(my_list)
ordered_list = ['Will', 'Mark', 'Rob']
print("기준이 되는 정렬 리스트 : ")
print(ordered_list)
temp = dict(my_list)
my_result = [(key, temp[key]) for key in ordered_list]
print("정렬된 튜플 리스트 : ")
print(my_result)실행 결과
튜플 리스트 :
[('Mark', 34), ('Will', 91), ('Rob', 23)]
기준이 되는 정렬 리스트 :
['Will', 'Mark', 'Rob']
정렬된 튜플 리스트 :
[('Will', 91), ('Mark', 34), ('Rob', 23)]코드 설명
- 먼저 ('이름', 나이) 형태의 튜플로 구성된 리스트
my_list를 정의하고 콘솔에 출력합니다. - 다음으로 원하는 순서를 담은 별도의 리스트
ordered_list를 정의하고 출력합니다. dict(my_list)를 호출하여 튜플 리스트를 딕셔너리로 변환합니다. 이때 튜플의 첫 번째 요소가 키(key), 두 번째 요소가 값(value)이 됩니다.- 리스트 컴프리헨션을 통해
ordered_list의 요소(키)를 순회하면서 해당 키에 매핑된 값을 꺼내 새로운 튜플 리스트my_result를 생성합니다. - 그 결과, 외부 리스트의 순서를 그대로 따르는 정렬된 튜플 리스트가 완성되어 콘솔에 출력됩니다.
참고 사항
이 방식은 시간 복잡도 면에서도 효율적입니다. 딕셔너리는 해시 기반 구조이므로 키 조회가 평균 O(1)에 이루어지며, 전체 정렬 작업은 O(n) 시간 안에 처리됩니다. 다만 외부 리스트에 존재하지 않는 키가 포함되어 있으면 KeyError가 발생할 수 있으므로, 필요하다면 temp.get(key)를 사용해 기본값을 지정하는 것이 안전합니다.