[Python] defaultdict 란 무엇인가? 🔍

Sangho Han·2023년 7월 18일
1

🐍 Python

목록 보기
2/2
post-thumbnail

얼마 전 신나게 백준 문제를 푸다가, 다른 분의 코드에서 처음 보는 걸 발견하였다.

defaultdict 라는 것이었는데, 알아두면 유용하게 쓸 수 있을 것 같아 정리해보고자 한다!

defaultdict()📚

  • defaultdict 는 딕셔너리를 만드는 dict의 서브 클래스이다.

  • 파이썬의 collections 모듈에서 사용할 수 있다.

  • keyvalue를 따로 정하지 않으면, 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})
  1. importdefaultdict을 선언해준다.

  2. 기본값을 설정한다. 현재는 int로 설정하였기에, 기본값은 0이 된다.

  3. key1value를 따로 설정해주지 않았다. 그렇기에 기본값인 0을 value로 가진다.

  4. 만약 기본값을 리스트나 셋으로 설정하였다면, 'key1': []'key1': set() 으로 초기화되었을 것이다.

즉, defaultdict는 이름 그대로 입력 받은 keyvalue를 갖고 있지 않다면, 디폴트값을 할당해주는 딕셔너리이다.

어디서 쓰일까?

defaultdict가 어떻게 쓰여야 유용한 것인지 말해보도록 하겠다.

defaultdict(int)

우리가 기존에 딕셔너리를 활용해서 문자열의 개수를 세줄 때는 보통 다음과 같이 코드를 작성한다.

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})

훨씬 간결해진 모습을 볼 수 있다. 문자열의 개수를 세줄 때 유용하게 쓸 수 있을 것 같다!


(사진 출처: https://realpython.com/python-defaultdict/)

profile
안녕하세요. 비즈니스를 이해하는 백엔드 개발자, 한상호입니다.

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

글 잘 봤습니다, 많은 도움이 되었습니다.

답글 달기