Python에서 딕셔너리와 리스트를 zip()으로 묶기
Python의 내장 함수인 zip()을 활용하면 딕셔너리의 키-값 쌍과 리스트의 각 요소를 하나씩 짝지어 새로운 이터레이터를 만들 수 있습니다.
zip()은 여러 이터러블(iterable) 객체를 인자로 받아, 각 객체에서 같은 위치에 있는 요소들을 튜플 형태로 묶어줍니다. 딕셔너리에 items() 메서드를 적용하면 키-값 쌍이 튜플로 반환되므로, 이를 리스트와 함께 zip()에 전달하면 원하는 결과를 얻을 수 있습니다.
기본 사용 예시
>>> dictionary = {'A': 1, 'B': 2, 'C': 3}
>>> num_list = [1, 2, 3]
>>> zipped = zip(dictionary.items(), num_list)
>>> zipped
<zip object at 0x000000886641B9C8>zip()의 반환값은 zip 객체(이터레이터)이기 때문에 그 자체로는 내부 내용을 바로 확인할 수 없습니다. 이 객체를 list()로 변환하면 아래와 같은 출력 결과를 볼 수 있습니다.
>>> list(zipped)
[(('A', 1), 1), (('B', 2), 2), (('C', 3), 3)]
결과 해석
출력 결과를 살펴보면, 딕셔너리의 각 키-값 쌍(('A', 1), ('B', 2), ('C', 3))이 리스트의 동일한 인덱스에 있는 요소와 순서대로 짝지어진 것을 확인할 수 있습니다. 즉, '키-값 쌍 튜플'과 '리스트 요소'로 구성된 튜플들의 리스트가 최종적으로 생성됩니다.
알아두면 좋은 점
- zip 객체는 한 번만 순회할 수 있는 이터레이터입니다. 이미 소진된 zip 객체를 다시
list()로 변환하면 빈 리스트가 반환되므로 주의해야 합니다. - 묶으려는 두 이터러블의 길이가 서로 다르면, 더 짧은 쪽의 길이에 맞춰서 묶입니다.
- Python 3.10부터는
strict=True옵션을 사용하여 길이가 일치하지 않을 경우 오류를 발생시킬 수도 있습니다.