딕셔너리 새로운 키의 값을 저장할 때 해당 키가 존재하지 않는다면 오류가 발생한다.
그래서 그에 따른 처리를 미리 해 둘 필요가 있다.
a = 'roboot'
d = {}
for k in a:
if k in d:
d[k] += 1
else:
d[k] = 1
print(d)
=> {'r': 1, 'o': 2, 'b': 2, 't': 1}
위처럼 if ~ else 절을 이용하여 예외 처리가 가능하다. 그런데 이를 대신할 수 있는 방법 두 가지가 있다. setdefault 메서드와 defaultdict 함수이다.
setdefault 메서드
a = 'robbot'
d = {}
for k in a:
d[k] = d.setdefault(k, 0) + 1
print(d)
=> {'r': 1, 'o': 2, 'b': 2, 't': 1}
setdefault 메서드는 다음과 같이 동작한다.
d.setdefault(k, v)
- k에 해당하는 키가 있을 때, 그 키의 값을 반환한다.
- k에 해당하는 키가 없을 때, 딕셔너리에 k:v 저장하고 v를 반환한다.
defaultdict
또 다른 방법으로 ‘디폴트 값을 갖는 딕셔너리’를 생성하는 방법도 있다. 이 딕셔너리는 찾는 키가 없으면 예외를 발생시키지 않고 해당 키를 추가하되, 미리 등록해 놓은 함수가 반환하는 디폴트 값을 그 키의 값으로 저장한다.
from collections import defaultdict # defaultdict는 collections 모듈의 함수이다
a = 'robbot'
d = defaultdict(int) # int 함수를 등록하면서 defaultdict 호출
for k in a:
d[k] += 1 # 일반 딕셔너리와 사용법은 같다.
print(d)
=> defaultdict(<class 'int'>, {'r': 1, 'o': 2, 'b': 2, 't': 1})
'python' 카테고리의 다른 글
파이썬 웹 스크래핑 (0) | 2022.05.14 |
---|---|
set과 frozenset (0) | 2022.04.07 |
파이썬의 메모리 관리 (0) | 2022.04.06 |
제너레이터 함수 (0) | 2022.03.06 |
리스트 컴프리헨션(2) (0) | 2022.03.02 |