본문 바로가기
Python

[Python] defaultdict

by Henry Cho 2022. 8. 4.
728x90

defaultdict


포스트 난이도: HOO_Junior

 

[Notice] 포스트 난이도에 대한 설명

안녕하세요, HOOAI의 Henry입니다. Bro들의 질문에 대한 내용을 우선적으로 포스팅이 되다 보니 각각의 포스트에 대한 난이도가 달라서 난이도에 대한 부분을 작성하면 좋겠다는 의견을 들었습니다

whoishoo.tistory.com


 

# defaultdict

 

defaultdict는 dictionary의 특징을 가지고 있으며 기본값을 설정하는 딕셔너리(dictionary)에 해당한다. 따라서 defauldict을 유사 딕셔너리라고도 부른다. defaultdict이라는 단어에서도 유추해볼 수 있듯이 dict에 default 값을 설정해준다는 것이며, 이것이 defaultdict의 주요 기능이다. 딕셔너리 사용에 있어서 defauldict을 통해 기본값을 설정하는 이유는 key error 발생을 예방하기 위해서이다. 우리가 딕셔너리를 사용하다 보면 선언된 값에 대해서는 문제없이 컴파일이 이루어지지만 선언되지 않은 값을 출력하려고 하거나 사용하려고 할 때 key error가 발생한다. 이러한 key error 발생을 defauldict 통해서 방지할 수 있다는 것이다.

 


# defaultdict 예제

 

defaultdict에 대한 예제를 살펴보기 앞서서 defaultdict이 왜 필요한지에 대한 것을 딕셔너리 key error 예제를 통해서 알 수 있다. 아래의 간단한 딕셔너리 예제 코드를 살펴보도록 하자.

 

HOOAI = {1: "Python", 2: "Java", 3: "C++", 4: "C"}

print(HOOAI)  
print(HOOAI[1])
{1: 'Python', 2: 'Java', 3: 'C++', 4: 'C'}
Python

 

위의 코드에서는 HOOAI라는 딕셔너리가 존재하고 print을 할 경우 전체 딕셔너리가 출력되고 필요한 딕셔너리의 숫자를 입력하면 해당 딕셔너리의 값만 출력되는걸 확인할 수 있다. 하지만 여기서 4보다 큰 숫자를 입력하게 되면 딕셔너리 값이 지정되어 있지 않기 때문에 key error가 컴파일 과정에서 발생한다. 이러한 문제를 방지하고자 우리는 defaultdict을 사용한다. 아래는 defaultdict을 사용한 예제 코드이다.

 

from collections import defaultdict
def HOOAI():
    return "Default"
      
val = defaultdict(HOOAI)
val[1] = "Python"
val[2] = "Java"
val[3] = "C++"
val[4] = "C"
  
print(val[1])
print(val[2])
print(val[3])
print(val[4])
print(val[5])
Python
Java
C++
C
Default

 

위의 예제처럼 defaultdict를 사용하게 되면 선언되지 않은 val [5]와 같은 값은 HOOAI로 정의된 문장인 "Default"라는 문장이 값을 대신하여 출력된다. 이로 인해 Key error와 같은 문제를 사전에 방지할 수 있다는 점에서 defauldict을 많이 사용하는 편이다. 또한 defaultdict를 통해서 Key의 개수를 확인하는데도 도움이 된다.


# defaultdict 언제 사용하나요?

 

defaultdict의 경우에는 Key의 갯수를 확인하거나 리스트 형식으로 작성된 데이터에서 필요한 데이터를 확인하고 정리하는 과정에서 많이 사용되는 기능이다. 예를 들어서 2022 카카오 코딩 문제 1번을 살펴보면 defaultdict을 사용하고 있는 걸 알 수 있다. 게시판 불량 사용자를 신고하고 처리 결과를 이메일로 발송하는 프로그램을 만든다고 했을 때, 리스트 안에 ID와 report 한 사람, 유효한 report 수 등이 존재하고 여기서 한 유저의 중복 신고는 하나의 신고로 인정되기 때문에 defaultdict을 통해 이를 정리할 수 있다. 참고로 defaultdict을 사용하지 않고 set()을 통해서도 중복 신고 건수를 정리할 수 있다.

 

https://tech.kakao.com/2022/01/14/2022-kakao-recruitment-round-1/

 

2022 카카오 신입 공채 1차 온라인 코딩테스트 for Tech developers 문제해설

지난 2021년 9월 11일 토요일 오후 2시부터 7시까지 5시간 동안 2022 KAKAO BLIND RECRUITMENT 1차 코딩 테스트가 진행되었습니다. 테스트에는 총 7개의 문제가 출제되었으며, 개발 언어는 C++, Java, JavaScript, K

tech.kakao.com


 

728x90

'Python' 카테고리의 다른 글

[Python] 파이썬 웹기반 IDE: Jupyterlab, Colab  (0) 2022.09.03
[Python] Sets란?  (0) 2022.08.08
[Python] def 란?  (0) 2022.08.03
[Python] if 문이란? (if statement)  (0) 2022.07.31
[Keras] model.compile(), 모델 컴파일  (0) 2022.07.28

댓글