defaultdict - 딕셔너리 초기값 지정

Red_Panda·2021년 7월 19일
0

코딩테스트

목록 보기
2/2
from collections import defaultdict

위 코드로 import가 가능하다.

defaultdict는 아래와 같이 딕셔너리 값에 초기값을 줄 수 있다.

  1. int_dict = defaultdict(int)
    초기값이 int인 0으로 주어진다.
  2. list_dict = defaultdict(list)
    초기값이 list 형태로 []가 주어진다.
  3. set_dict = defaultdict(set)
    초기값이 set 형태로 {}가 주어진다.

무슨 말인지 이해를 돕기 위해 아래와 같은 코드를 작성했다.

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은 중복값을 허용하지 않을때

이런식으로 응용하여 사용하면 될 것 같다!

오늘도 코딩테스트 문제를 풀면서 새로운 것을 배웠다.

profile
신입 개발자

0개의 댓글