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

Python에서 두 개의 리스트로 딕셔너리 만드는 방법

Python 프로그래밍을 하다 보면 키(key) 역할을 하는 리스트와 값(value) 역할을 하는 리스트, 이렇게 두 개의 리스트를 하나의 딕셔너리로 합쳐야 하는 경우가 자주 발생합니다. 예를 들어 학생 이름 리스트와 점수 리스트가 따로 있을 때, 이를 {'이름': 점수} 형태의 딕셔너리로 변환하는 것이죠.

딕셔너리 컴프리헨션 활용하기

L1과 L2가 각각 키와 값들을 담고 있는 리스트 객체라면, 딕셔너리 컴프리헨션(dictionary comprehension) 문법을 사용해 간단하게 딕셔너리 객체를 생성할 수 있습니다.

>>> L1 = ['a','b','c','d']
>>> L2 = [1,2,3,4]
>>> d = {L1[k]:L2[k] for k in range(len(L1))}
>>> d
{'a': 1, 'b': 2, 'c': 3, 'd': 4}

위 코드는 range(len(L1))로 인덱스를 순회하면서 L1의 요소를 키로, 같은 인덱스에 있는 L2의 요소를 값으로 매핑합니다. 실행 결과 두 리스트가 하나의 딕셔너리로 깔끔하게 병합된 것을 확인할 수 있습니다.

zip() 함수를 사용한 더 파이썬다운 방법

인덱스를 직접 다루는 방식보다는 내장 함수 zip()을 활용하는 것이 더 간결하고 가독성이 뛰어나며, Python 개발자들 사이에서 권장되는 관용적(idiomatic) 표현입니다.

>>> L1 = ['a','b','c','d']
>>> L2 = [1,2,3,4]
>>> d = dict(zip(L1, L2))
>>> d
{'a': 1, 'b': 2, 'c': 3, 'd': 4}

zip() 함수는 두 리스트의 요소들을 인덱스 순서대로 짝지어 (키, 값) 튜플 형태로 묶어주며, dict() 생성자가 이 튜플들을 딕셔너리로 변환해 줍니다.

주의사항

두 리스트의 길이가 서로 다르면 zip()은 더 짧은 쪽 기준으로만 매핑하므로 일부 데이터가 누락될 수 있습니다. 길이가 다른 경우에는 itertools.zip_longest()를 사용하거나 사전에 길이를 검증하는 것이 안전합니다. 또한 딕셔너리의 키는 불변(immutable) 타입이어야 하므로, 키로 사용할 리스트에는 문자열이나 숫자처럼 해시 가능한 값들이 담겨 있어야 합니다.