본문 바로가기

python

dict & defaultdict

딕셔너리 새로운 키의 값을 저장할 때 해당 키가 존재하지 않는다면 오류가 발생한다.

그래서 그에 따른 처리를 미리 해 둘 필요가 있다.

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)

  1. k에 해당하는 키가 있을 때, 그 키의 값을 반환한다.
  2. 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