상세 컨텐츠

본문 제목

[PYTHON] 파이썬 collections 모듈(1) defaultdict

PYTHON/기본

by ranlan 2021. 10. 30. 21:47

본문

728x90

[공식문서] https://docs.python.org/3.3/library/collections.html#collections.defaultdict

 

8.3. collections — Container datatypes — Python 3.3.7 documentation

8.3. collections — Container datatypes Source code: Lib/collections/__init__.py This module implements specialized container datatypes providing alternatives to Python’s general purpose built-in containers, dict, list, set, and tuple. namedtuple() fact

docs.python.org

[참고] https://excelsior-cjh.tistory.com/95?category=966334 

 

collections 모듈 - defaultdict

collections.defaultdict 1. defaultdict란 collections.defaultdict 는 딕셔너리( dictionary )와 거의 비슷하지만 key값이 없을 경우 미리 지정해 놓은 초기(default)값을 반환하는 dictionary 이다. defaultdic..

excelsior-cjh.tistory.com

 

 

defaultdict이란

from collections import defaultdict

없는 key에 접근할 경우 에러 처리를 위해 지정한 기본값으로 초기화

 

 

defaultdict()

기본적으로 없는 key에 접근하는 경우 KeyError Exception 발생

dict = defaultdict(a=1, b=2)
print(dict) # defaultdict(None, {'a': 1, 'b': 2})
print(dict['c']) # KeyError: 'c'

 

사용자가 직접 정의한 메서드나 list(), set()등의 메서드로 정의되지 않은 키값에 대해 기본값 설정 가능

def default_factory():
    return 'null'
dict = defaultdict(default_factory, a=1, b=2)

print(dict['c']) # null

- 원래 없던 key인 c에 접근할 때 default_factory(사용자 지정 함수)에서 지정한 null로 출력

ex_list = defaultdict(list, a=[1,2], b=[3,4])
print(ex_list) # defaultdict(<class 'list'>, {'a': [1, 2], 'b': [3, 4]})
print(ex_list['c']) # []

- 기본값을 list로 지정하여 정의되지 않은 키에 접근할 경우 리스트[]로 출력

ex_set = defaultdict(set, a={1,2}, b={3,4})
print(ex_set) # defaultdict(<class 'set'>, {'a': {1, 2}, 'b': {3, 4}})
print(ex_set['c']) # set()

- 기본값을 set으로 지정하여 정의되지 않은 키에 접근할 경우 집합[]으로 출력

ex_int = defaultdict(int, a=1, b=2)
print(ex_int) # defaultdict(<class 'int'>, {'a': 1, 'b': 2})
print(ex_int['c']) # 0

- 기본값을 int로 지정하여 정의되지 않은 키에 접근할 경우 0으로 출력

 

 

dict.setdefault()

키와 값 하나를 인자로 받는 dictionary 메서드로 값이 있다면 해당 값을 없다면 두번째 인자 반환

list_ = ['a', 'b', 'c', 'b', 'a', 'b', 'c']
dict_ = {}
for k in list_:
    dict_.setdefault(k, 0) 
    dict_[k] += 1
    print(list(dict_.items()))

 

 

예) 리스트에서 원소 개수 구하기

list_ = ['a', 'b', 'c', 'b', 'a', 'b', 'c']

1) dict.setdefault()

dict_ = {}
for k in list_:
    dict_.setdefault(k, 0) 
    dict_[k] += 1

2) collections.defaultdict()

dict_ = collections.defaultdict(int)
for k in list_:
    dict_[k] += 1

3) collections.couter()

c_dict = collections.Counter(list_)
728x90

관련글 더보기

댓글 영역