Collections in Python

백준이나 프로그래머스에서 알고리즘 풀이를 보면 collections 모듈을 사용하는 것을 쉽게 볼 수 있다. 딕셔너리와 관련된 특수한 형태의 컨테이너 자료형인 defaultdict, Counter, OrderedDict에 대해 알아보자.

defaultdict 객체

defaultdict 객체는 존재하지 않는 키를 조회할 경우, 에러 메시지를 출력하는 대신 디폴트 값을 기준으로 해당 키에 대한 딕셔너리 아이템을 생성해준다.

파이썬 내장 dict의 존재하지 않는 키에 값을 대입한다면 어떻게 될까?

a = {'A':1, 'B':2}
a['C'] += 1
# KeyError: 'C'

KeyError가 발생한다.

defaultdict 객체를 사용하면 이러한 문제를 해결할 수 있다.

a = collections.defaultdict(int)
a['A'] = 5
a['B'] = 4
a['C'] += 1
print(a)

# output: defaultdict(<class 'int'>, {'A': 5, 'B': 4, 'C': 1})

Counter 객체

Counter 객체는 아이템에 대한 개수를 계산해 딕셔너리로 리턴하며, 다음과 같이 사용한다.

a = [1,2,3,4,5,5,5,6,6]
b = collections.Counter(a)
print(b)

# output: Counter({5: 3, 6: 2, 1: 1, 2: 1, 3: 1, 4: 1})

개수를 자동으로 계산해주기 때문에 매우 편리하며, 여러 분야에서 다양하게 활용된다. 그렇다면 Counter 객체에서 가장 빈도 수가 높은 요소는 어떻게 추출할까? most_common()을 사용하면 된다.

b.most_common(2)

# output: [(5,3), (6,2)]

OrderedDict 객체

입력값을 부여할 경우 OrderedDict는 입력 그대로 순서가 유지된다. Python 3.7부터 기본 dict 자료형도 입력 순서가 보장된다.

a = collections.OrderedDict({'banana': 3, 'apple': 4})
print(a)

# output: OrderedDict([('banana': 3), ('apple': 4)])

좋은 웹페이지 즐겨찾기