dict & defaultdict

김건우·2021년 12월 22일
0

파이썬

목록 보기
16/18
post-thumbnail

키가 존재할 때와 존재하지 않을 때

키가 존재하는 경우(수정)

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})
profile
공부하는 개발자가 목표입니다.

0개의 댓글