2021. 2. 16. 15:15ㆍProgramming Language/Python
사전의 기본값 처리 collections.defaultdict
일반적인 dictionary 기본값 처리
숫자 리스트
li = [1,1,2,2,2,3,3,5]
의 출현 횟수를 count하는 경우를 생각해 봅시다.
딕셔너리를 이용해 구할 수 있습니다.
포문을 돌며 딕셔너리에 해당 값이 없을 경우엔 i
가 키인 값을 0으로 초기화 해주고 모든 경우에 += 1
해줍니다.
li = [1,1,2,2,2,3,3,5]
dict = {}
for i in li:
if i not in dict:
dict[i] = 0
dict[i] += 1
print(dict)
"""
{1: 2, 2: 3, 3: 2, 5: 1}
"""
if
문을 사용해 존재하지 않는 키에 대한 값을 초기화 해주는 이유는 존재하지 않는 키에 접근했을 경우 다음과 같은 에러가 발생하기 때문입니다.
# 이렇게 할 경우
for i in li:
dict[i] += 1
"""
다음과 같은 에러가 발생
dict[i] += 1
KeyError: 1
"""
반면 defaultdict
를 이용하면 if문을 이용한 처리 없이 기본값을 처리 할 수 있습니다.
collections 모듈의 defaultdict
collections.defaultdict
는 딕셔너리에 없는 키값을 호출했을 때 오류처리를 하지 않고 default값으로 return 합니다.
collections
모듈을 import 하여 사용합니다.
from collections import defaultdict
# import collections
이것을 사용하면 위의 코드보다 훨씬 간결하고 깔끔하게 기본값 처리가 가능합니다.
from collections import defaultdict
li = [1,1,2,2,2,3,3,5]
dict = defaultdict(int)
for i in li:
dict[i] += 1
print(dict) # defaultdict(<class 'int'>, {1: 2, 2: 3, 3: 2, 5: 1})
기본값 int로 세팅 (또는 lambda: 0)
defaultdict
의 기본값을 int
로 세팅하면 int()
는 0을 리턴하기 때문에 기본값을 0으로 세팅이 가능하다. lambda: 0
도 같은 기능을 한다.
기본값 list로 세팅
list
를 기본값으로 세팅하고 append()
할 경우 해당 키값이 존재하지 않아도 오류를 뿜지 않고 빈 리스트로 세팅해주고 append가 가능하다.
필자는 주로 그래프를 정의해줄 때 쓴다.
1의 자식은 2,3,4 / 2의 자식은 5,6... 이런식으로 활용이 가능하기 때문이다.
from collections import defaultdict
"""
1
/\ /\
2 3 4 5
/ \
6 7
"""
tree = [[1,2],[1,3],[1,4],[1,5],[2,6],[5,7]]
dict = defaultdict(list)
for node in tree:
dict[node[0]].append(node[1])
print(dict)
# defaultdict(<class 'list'>, {1: [2, 3, 4, 5], 2: [6], 5: [7]})
참고 자료
https://www.daleseo.com/python-collections-defaultdict/
https://dongdongfather.tistory.com/69
'Programming Language > Python' 카테고리의 다른 글
[Python] input()과 sys.stdin (2) | 2021.02.09 |
---|---|
[Python] 파이썬에서 아스키코드 변환 (chr(), ord()) (0) | 2021.02.07 |
[Python] zip() (0) | 2021.01.26 |
[Python] heapq 모듈 (0) | 2021.01.19 |
[Python] Call by.. What? (0) | 2021.01.15 |