from collections import defaultdict
위 코드로 import가 가능하다.
defaultdict는 아래와 같이 딕셔너리 값에 초기값을 줄 수 있다.
무슨 말인지 이해를 돕기 위해 아래와 같은 코드를 작성했다.
s = "helloworld"로 주어졌을때
dict_test = dict()
for i in s:
dict_test[i]+=1
위 코드처럼 일반 dict()의 경우 존재하지 않는 key값 존재로 오류가 난다.
for i in s:
if i in dict_test:
dict_test[i]+=1
else:
dict_test[i]=1
output : {'h': 1, 'e': 1, 'l': 3, 'o': 2, 'w': 1, 'r': 1, 'd': 1}
이렇게 일반적인 dict()는 존재하지 않는 key값일 경우 해당 key에 value값을 지정해주고, 추가해 나가는 식이였다.
그러나 defaultdict를 이용하면 간단해진다.
for i in s:
int_dict[i]+=1 # 초기값 int
list_dict[i].append(1) # 초기값 list
set_dict[i].add(1) # 초기값 set
defaultdict를 이용해 각각 인자값을 넣어 초기값을 세팅해준 위 코드는 아래와 잘 작동된다.
output : defaultdict(<class 'int'>, {'h': 1, 'e': 1, 'l': 3, 'o': 2, 'w': 1, 'r': 1, 'd': 1})
output : defaultdict(<class 'list'>, {'h': [1], 'e': [1], 'l': [1, 1, 1], 'o': [1, 1], 'w': [1], 'r': [1], 'd': [1]})
output : defaultdict(<class 'set'>, {'h': {1}, 'e': {1}, 'l': {1}, 'o': {1}, 'w': {1}, 'r': {1}, 'd': {1}})
그럼 없는 key값은 어떻게 나올까? 아까 처음에 말했던 초기값이 나오게 된다.
"helloworld" 에 존재하지 않는 값 'a'를 key로 넣어봤다.
print(int_dict['a']) # output : 0
print(list_dict['a']) # output : []
print(set_dict['a']) # output : {}
int는 각 key가 몇번이 나왔는지 횟수를 셀때(위와 같이 각 알파벳이 몇번 나왔는지)
list는 프로그래머스 Lv3 베스트 앨범 문제처럼, 해당 키에 해당하는 여러값이 필요할때
set은 중복값을 허용하지 않을때
이런식으로 응용하여 사용하면 될 것 같다!
오늘도 코딩테스트 문제를 풀면서 새로운 것을 배웠다.