키가 존재할 때와 존재하지 않을 때
키가 존재하는 경우(수정)
d = {'red':3, 'white':2, 'blue':4 } d['red'] = 1 # 값이 수정 > {'red':1, 'white':2, 'blue':4}
키가 존재하지 않는 경우(추가)
d = {'white':2, 'blue':4 } d['red'] = 1 # 값이 추가 > {'white':2, 'blue':4, 'red':1}
저장되어 있는 값을 참조하는 경우
키가 존재할 때d = {'red':3, 'white':2, 'blue':4 } d['red'] += 1 > {'red':4, 'white':2, 'blue':4 }
키가 존재하지 않을 때
d = {'white':2, 'blue':4 } d['red'] = 1 > KeyError: 'red'
위 예제와 같이, 키가 존재할 대와 존재하지 않을 때의 상황 별 실행코드를 구분할 필요가 있다.
상황 별 실행
s = 'robbot' d = {} for k in s: if k in d: # 키가 존재할 경우 d[k] +=1 else: # 키가 없을 경우 d[k] = 1 > {'r':1, 'o':2, 'b':2, 't':1}
Set Default 메서드
setdefualt 메서드
s = 'robbot' d = {} for k in s: d[k] = d.setdefault(k, 0) + 1 > { 'r':1, 'o':2, 'b':2, 't':1 }
setdefault(키, 값)
: 없을경우 추가, 있을경우 값 반환
Default Dict
default dict
사용 : defaultdict(함수)찾는 키가 없으면 예외를 발생시키지 않고, 해당 키를 추가하되, 미리 등록해 놓은 함수가 반환하는 디폴트 값을 그 키의 값으로 저장
from collections import defaultdict s = 'robbot' d = defaultdict(int) # int 함수를 등록하면서 defaultdict 호출 for k in s: d[k] += 1 > defaultdict(<class 'int'>, {'r':1, 'o':2, 'b':2, 't':1}) print(d['r'], d['o'], d['b'], d['t'], sep = ', ') > 1, 2, 2, 1
번외 - int함수
n1 = int('36') > 36 # 문자열을 정수로 변환해서 반환 n2 = int() > 0 # 아무 값도 전달되지 않으면 0을 반환
다른 방법 - 0 반환 함수 생성
def ret_zero(): return 0
d = defaultdict(ret_zero) d['a'] # 해당 키가 없으므로 이 순간 'a':0 이 등록. > 0 d > defaultdict(<function ret_zero at 0x5315315>, {'a':0}
다른 방법 lambda 이용
d = defaultdict(lambda: 7) d['z'] > 7 d > defaultdict(<function <lambda> at 0x5315315>, {'z':7})