키 리스트와 값 리스트를 하나의 딕셔너리로 합치기
파이썬에서 키(key)가 담긴 리스트와 값(value)이 담긴 리스트가 각각 있을 때, 이 둘을 조합해 하나의 딕셔너리 객체를 만들 수 있습니다. 예를 들어 L1에는 키들이, L2에는 그에 대응하는 값들이 들어 있다고 가정해 보겠습니다.
가장 대표적인 방법은 다음과 같습니다.
1. zip() 함수와 dict() 함수 조합
zip() 함수로 두 리스트를 쌍(pair)으로 묶은 뒤, dict() 함수에 전달하면 간단하게 딕셔너리로 변환됩니다.
>>> 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(L1, L2)는 ('a', 1), ('b', 2)처럼 같은 인덱스끼리 묶인 튜플들을 생성하고, dict()가 이를 키-값 쌍으로 변환합니다. 코드가 짧고 직관적이라 실무에서도 가장 널리 사용되는 방식입니다.
2. 딕셔너리 컴프리헨션(dict comprehension) 활용
딕셔너리 컴프리헨션 문법을 사용하면 변환 과정을 한 줄로 표현할 수 있으며, 필요에 따라 값에 연산을 추가하기도 쉽습니다.
>>> L1 = ['a','b','c','d']
>>> L2 = [1,2,3,4]
>>> d = {k:v for k,v in zip(L1,L2)}
>>> d
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
예를 들어 값을 제곱해서 저장하고 싶다면 {k: v**2 for k, v in zip(L1, L2)}처럼 응용할 수 있습니다.
참고 사항
- 두 리스트의 길이가 다르면
zip()은 더 짧은 리스트 기준으로만 쌍을 만듭니다. 파이썬 3.10 이상에서는zip(L1, L2, strict=True)옵션으로 길이 불일치 시 오류를 발생시킬 수 있습니다. - 키가 중복되면 나중에 등장한 값이 이전 값을 덮어쓰므로, 키 리스트에 중복 요소가 없는지 확인하는 것이 좋습니다.