개발일기

[파이썬 자료구조] 해시 - defaultdict ( ) 본문

프로그래밍 이론/Python

[파이썬 자료구조] 해시 - defaultdict ( )

한민기 2021. 12. 6. 16:03
반응형

https://hanmingi.tistory.com/159

 

defaultdict( ) 클래스는 위 글에서 살펴본 딕셔너리를 만드는 dict 클래스의 서브 클래스이다.

 

작동방식은 dict 클래스의 방식과 거의 비슷한데, defaultdict 인자로 주어진 객체의 기본값을 딕셔너리 값의 초기값으로 지정하여 사용할 수 있다. 

 

# 사용 방법

>>> from collections import defaultdict
>>> dict = defaultdict(int)
>>> dict["key1"]
0
>>> dict
{ "key1" : 0 }

 

위와 같이 dict를 int형으로 지정하게 되면 값을 지정하지 않은 키는 그 값이 0으로 지정된다.

 

>>> dict["key2"] = "test"
>>> dict
{ "key1" : 0, "key2" : "test" }

 

dict의 default를 int형으로 설정 해주었다고 int형 값만 들어갈 수 있는 것은 아니다.

 

위처럼 값을 지정하면 해당 값으로 초기화된다.

 

>>> dict_list = defaultdict(list)

>>> dict_set = defaultdict(set)

 

int 형 뿐만 아니라 list 형태나 set 형태로도 초기화가 가능하다.

 

 


# 이걸 언제 사용하지?

https://hanmingi.tistory.com/154?category=836306 

 

[프로그래머스] 해시 Level 3 - 베스트앨범 (python)

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42579 코딩테스트 연습 - 베스트앨범 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노

hanmingi.tistory.com

 

프로그래머스의 베스트 앨범 문제를 살펴보면 

    for i in range(len(genres)):
        genre = genres[i]
        play = plays[i]

        if genre in play_Dict:
            play_Dict[genre] += play
        else:
            play_Dict[genre] = play

 

위와 같이 장르에 따른 재생 횟수를 추가해 주는 곳이 있다. 

 

장르가 딕셔너리에 있는지 없는지 살펴보고 있으면 1을 증가시키고 없으면 재생횟수를 대입해준다.

 

>>> play_Dict = defaultdict(int)
>>> play_Dict[genre] += play

 

라고 변경해주면 딕셔너리에 장르가 있다면 해당 값에 play 값을 더해서 다시 초기화 해주며 해당 장르값이 없다면 0으로 초기화 해준 후 play값을 더해서 선언을 해준다.

 

위와 같이 조건을 한번더 확인하지 않기 때문에 키의 개수를 세야하는 상황이나, 리스트, 셋의 항목을 정리할 때 사용하는 것이 효율적인 사용방법인 것 같다.

반응형
Comments