얼마 전 신나게 백준 문제를 푸다가, 다른 분의 코드에서 처음 보는 걸 발견하였다.
defaultdict
라는 것이었는데, 알아두면 유용하게 쓸 수 있을 것 같아 정리해보고자 한다!
defaultdict
는 딕셔너리를 만드는 dict
의 서브 클래스이다.
파이썬의 collections
모듈에서 사용할 수 있다.
key
에 value
를 따로 정하지 않으면, defaultdict
는 인자로 주어진 객체의 기본값으로 value
를 초기화한다.
기본값으로는 숫자 int
, 리스트 list
, 셋 set
들이 가능하다.
from collections import defaultdict
default_dct = defaultdict(int)
default_dct['key1']
default_dct['key2'] = 2
print(default_dct)
# 출력
defaultdict(<class 'int'>, {'key1': 0, 'key2': 2})
import
로 defaultdict
을 선언해준다.
기본값을 설정한다. 현재는 int
로 설정하였기에, 기본값은 0이 된다.
key1
은 value
를 따로 설정해주지 않았다. 그렇기에 기본값인 0을 value
로 가진다.
만약 기본값을 리스트나 셋으로 설정하였다면, 'key1': []
와 'key1': set()
으로 초기화되었을 것이다.
즉,
defaultdict
는 이름 그대로 입력 받은key
가value
를 갖고 있지 않다면, 디폴트값을 할당해주는 딕셔너리이다.
defaultdict
가 어떻게 쓰여야 유용한 것인지 말해보도록 하겠다.
우리가 기존에 딕셔너리를 활용해서 문자열의 개수를 세줄 때는 보통 다음과 같이 코드를 작성한다.
dct = dict()
word = 'sanghos interaction'
for w in word:
if w not in dct:
dct[w] = 1
continue
dct[w] += 1
print(dct)
# 출력
{'s': 2, 'a': 2, 'n': 3, 'g': 1, 'h': 1, 'o': 2, ' ': 1, 'i': 2, 't': 2, 'e': 1, 'r': 1, 'c': 1}
이런식으로 key
값이 dict
에 존재하는지 여부를 확인해주어야 한다.
하지만 defaultdict
를 사용한다면, 존재하지 않는 key
값에 대해서는 이미 0
을 할당하기 때문에 아래와 같이 바로 개수를 더해주어도 된다.
from collections import defaultdict
default_dct = defaultdict(int)
word = 'sanghos interaction'
for w in word:
default_dct[w] += 1
print(default_dct)
# 출력
defaultdict(<class 'int'>, {'s': 2, 'a': 2, 'n': 3, 'g': 1, 'h': 1, 'o': 2, ' ': 1, 'i': 2, 't': 2, 'e': 1, 'r': 1, 'c': 1})
훨씬 간결해진 모습을 볼 수 있다. 문자열의 개수를 세줄 때 유용하게 쓸 수 있을 것 같다!
글 잘 봤습니다, 많은 도움이 되었습니다.