[자바개발자의 파이썬도전기 - 12] Dictionary Modules(defaultdict, Counter, OrderedDict)

Coen·2022년 12월 10일
1

python

목록 보기
13/15
post-thumbnail

JAVA 개발자의 PYTHON 도전기

이 포스트는 개인적으로 공부한 내용을 정리한 글입니다.
자세한 내용은 아래 참고자료를 봐주시면 감사하겠습니다.

기본 문법

Dictionary Modules

Dictionary와 관련된 특수한 형태의 컨테이너 자료형인 defaultdict, Counter, OrderedDict에 대해서 알아보겠습니다.

defaultdict는 존재하지 않는 키에 값을 입력하면 오류가 발생하지 않고 새로운 key: value를 생성해주는 자료구조입니다.
사용방법은 아래와 같습니다.

>>> from collections import defaultdict # 외부함수이기 때문에 import가 필요함

>>> default_dictionary = defaultdict(int) # int 형식의 defaultdict를 생성
>>> default_dictionary
defaultdict(<class 'int'>, {})

위에서 언급한 존재하지 않는 키에 값을 입력해보겠습니다.

>>> default_dictionary
defaultdict(<class 'int'>, {})
>>> default_dictionary["first"] += 1
>>> default_dictionary
defaultdict(<class 'int'>, {'first': 1})

defaultdict의 활용 방법입니다.

>>> str_test = "coenblog"
>>> defaultdict_test = defaultdict(int)
>>> for i in str_test:
...     defaultdict_test[i] += 1
...
>>> defaultdict_test
defaultdict(<class 'int'>, {'c': 1, 'o': 2, 'e': 1, 'n': 1, 'b': 1, 'l': 1, 'g': 1})

Counter는 아이템의 갯수를 계산해 dictionary로 반환하는 객체입니다.

>>> counter_test = [1, 2, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5]
>>> counter_obj = Counter(counter_test)
>>> counter_obj
Counter({4: 5, 3: 3, 5: 2, 1: 1, 2: 1})

Counter의 내장 함수들입니다.
Collections.most_common()은 카운터 내부 객체의 갯수를 list(tuple)형태로 리턴합니다.
Collections.most_common(n)는 상위 n개 만큼 list(tuple)형태로 리턴합니다.

>>> from collections import Counter
>>> counter_test = [1, 2, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5]
>>> counter_obj = Counter(counter_test)
>>> print(counter_obj.most_common())
[(4, 5), (3, 3), (5, 2), (1, 1), (2, 1)]
>>> print(counter_obj.most_common(2))
[(4, 5), (3, 3)]

Collections.values()는 Counter 객체 안에 있는 value 값들을 리스트로 반환합니다.
Counter의 전체 갯수를 알고 싶다면 sum을 이용하면 됩니다.

>>> counter_obj.values()
dict_values([1, 1, 3, 5, 2])
>>> sum(counter_obj.values())
12

Counter 객체의 값을 0으로 만들면 어떻게 될까요?

>>> counter_obj
Counter({4: 5, 3: 3, 5: 2, 1: 1, 2: 1})
>>> counter_obj[2] -= 1
>>> counter_obj
Counter({4: 5, 3: 3, 5: 2, 1: 1, 2: 0})
>>> counter_obj.values()
dict_values([1, 0, 3, 5, 2])

위와 같이 0으로 남아있는것을 볼 수 있습니다.


OrderedDict는 파이썬 3.7 이전까지 사용되던 객체입니다.
3.6 버전까지는 Dictionary 자료형이 순서를 보장해주지 않기에 사용했다고 합니다.
요즘은 거의 사용하지 않으니 간단하게 넘어가겠습니다.
공식문서에는 'Dictionary that remembers insertion order' 라고 적혀있습니다.
사용방법은 아래와 같습니다.

>>> OrderedDict({"apple": 4, "banana": 3, "mango": 6})
OrderedDict([('apple', 4), ('banana', 3), ('mango', 6)])

참고자료 (파이썬 알고리즘 인터뷰 - yes24)

참고자료 (부자아빠 블로그)

profile
백엔드 프로그래머

0개의 댓글