이번 글에서는 Python에서 가장 널리 사용되는 컬렉션인 리스트(list)를 사전(dictionary)으로 변환하는 방법을 알아봅니다. 리스트에는 인덱스나 키가 데이터의 일부로 포함되어 있지 않지만, 사전에서는 모든 요소(값)에 키 또는 인덱스가 반드시 연결되어야 합니다.
1. enumerate 함수 활용
enumerate 함수는 순회 가능한 객체에 카운터를 추가해주며, 이 카운터를 사전의 값으로 사용할 수 있습니다. 리스트에 enumerate를 적용하고 딕셔너리 컴프리헨션(for 루프)과 함께 사용하면, 인덱스가 값으로 들어간 사전을 손쉽게 만들 수 있습니다.
예제
Alist = ['Mon', 'Tue', 'Wed', 'Wed', 11, 11]
# 주어진 리스트
print("Given list : ", Alist)
# 사전으로 변환
NewDict = {val: key + 1 for key, val in enumerate(Alist)}
# 결과 출력
print("Dictionary created with index : ", NewDict)
실행 결과
위 코드를 실행하면 아래와 같은 결과가 출력됩니다.
Given list : ['Mon', 'Tue', 'Wed', 'Wed', 11, 11]
Dictionary created with index : {'Mon': 1, 'Tue': 2, 'Wed': 4, 11: 6}
참고: 사전의 키는 고유해야 하므로, 중복된 요소가 있을 경우 중복 항목 중 더 큰 인덱스 값만 최종적으로 남게 됩니다. 위 예제에서 'Wed'는 4로, 11은 6으로 저장된 것을 확인할 수 있습니다.
2. zip과 range 함수 활용
또 다른 방법은 range 함수로 1부터 리스트 길이까지의 숫자 시퀀스를 생성한 뒤, zip 함수로 리스트 요소와 묶고 마지막에 dict 함수를 적용해 사전을 만드는 것입니다. range의 시작 값을 조절하면 인덱스 시작 번호도 자유롭게 지정할 수 있습니다.
예제
Alist = ['Mon', 'Tue', 'Wed', 'Wed', 11, 11]
# 주어진 리스트
print("Given list : ", Alist)
# 사전으로 변환
NewDict = dict(zip(Alist, range(1, len(Alist)+1)))
# 결과 출력
print("Dictionary created with index : ", NewDict)
실행 결과
위 코드를 실행하면 첫 번째 방법과 동일한 결과가 출력됩니다.
Given list : ['Mon', 'Tue', 'Wed', 'Wed', 11, 11]
Dictionary created with index : {'Mon': 1, 'Tue': 2, 'Wed': 4, 11: 6}
마무리
두 방식 모두 같은 결과를 만들어냅니다. enumerate를 활용한 딕셔너리 컴프리헨션은 간결하고 Python다운(Pythonic) 문법으로 일반적으로 권장되며, zip과 range의 조합은 인덱스 범위를 직접 제어해야 할 때 유용합니다. 상황에 맞게 적절한 방법을 선택해 사용하면 됩니다.