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

파이썬 딕셔너리에서 중복 키 다루기: defaultdict 활용법

파이썬 딕셔너리에서 중복 키 다루기: defaultdict 활용법

파이썬(Python)의 딕셔너리(dictionary)는 기본적으로 동일한 키(key)의 중복을 허용하지 않습니다. 같은 키에 새로운 값을 할당하면 기존 값이 덮어쓰여지기 때문입니다. 하지만 collections 모듈에 정의된 defaultdict 클래스를 활용하면 이러한 제약을 우회하여, 하나의 키에 여러 값을 그룹화해 저장할 수 있습니다.

1. defaultdict 객체 생성하기

defaultdict는 존재하지 않는 키에 접근할 때 자동으로 기본값을 생성해 주는 특수한 딕셔너리입니다. 여기서는 기본 팩토리(default factory)로 list를 지정하여, 각 키가 값들의 목록을 담도록 만듭니다.

>>> from collections import defaultdict
>>> d = defaultdict(list)

2. 데이터 준비 및 값 추가하기

두 개의 항목으로 구성된 튜플(tuple)들의 리스트가 있다고 가정해 보겠습니다. 첫 번째 항목(키)은 반복해서 나타나고, 두 번째 항목은 해당 키에 연결될 값입니다. 반복문을 통해 이 리스트를 defaultdict로 변환합니다.

>>> l = [(1, 111), (2, 222), (3, 333), (1, 'aaa'), (2, 'bbb'), (3, 'ccc')]
>>> for k, v in l:
... d[k].append(v)

여기서 핵심은 d[k].append(v) 부분입니다. 키 k가 아직 존재하지 않더라도 defaultdict가 자동으로 빈 리스트를 생성해 주기 때문에, KeyError 없이 바로 append() 메서드를 호출할 수 있습니다.

3. 일반 딕셔너리로 변환하기

마지막으로 dict() 함수를 사용해 defaultdict 객체를 일반 딕셔너리로 변환하면, 중복되었던 키들이 하나로 묶인 결과를 얻을 수 있습니다.

>>> dict(d)
{1: [111, 'aaa'], 2: [222, 'bbb'], 3: [333, 'ccc']}

결과를 보면 원래 중복되었던 키 1, 2, 3이 각각 하나의 키로 통합되고, 해당하는 값들은 리스트 형태로 함께 저장된 것을 확인할 수 있습니다. 이처럼 defaultdict를 사용하면 키 중복 제약 조건 속에서도 데이터를 효율적으로 그룹화하고 관리할 수 있습니다.