IT

[파이썬 기초] 딕셔너리 값 가져오기 get(), setdefault()

생각파워 2018. 11. 21. 11:22

파이썬 딕셔너리에서 키에 해당하는 값을 가져오려고 하면 주로 아래와 같이 사용한다.

 
>>> week_dict = dict()
>>> week_dict['Mon'] = '맑음'
>>> week_dict['Tue'] = '구름'
>>> week_dict['Sun'] = '비'
>>> week_dict
{'Mon': '맑음', 'Tue': '구름', 'Sun': '비'}
>>> 
>>> weather = week_dict['Sun']
>>> weather


'비'

 

week_dict['Sun'] 을 실행하면 'Sun' 키에 대한 값 '비'를 가져온다.

그런데 딕셔너리에 없는 값을 지정하면 어떻게될까?

아래와 같이 예외가 발생한다.

 

 >>> week_dict['Fri']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'Fri'

 

'Fri'라는 키가 없다고 예외를 발생시킨다.

try ... except 문으로 잡아주면 되는 부분이긴 한데, 그래도 신경쓰이는 부분이다.

 

이럴때 사용하는 딕셔너리의 메서드가 get() 이다.

 

딕셔너리.get(key[, default값]) 

 

 

 

위와 같이 사용할 수 있다.

딕셔너리에 key가 있으면 해당 key에 대한 값을 반환하고, key가 없으면 default에 지정한 값을 반환한다.

default에 값을 설정하지 않으면 아무값도(None) 반환하지 않는다.

 

예제를 보면

 

>>> week_dict.get('Fri')
>>> week_dict.get('Fri','없는키값입니다.')
'없는키값입니다.'

 

 

처음 week_dict.get('Fri') 를 실행했을때 아무값도 반환되지 않은것을 알수 있다.

두번째 week_dict.get('Fri','없는키값입니다.') 를 실행했을때는 'Fri'키가 없기때문에 default값으로 설정한 '없는 키값입니다.'가 반환되었다.

 

 

약~간 비슷한 메서드로 setdefault()메서드가 있다.

Introducing Python에서 get()과 setdefault()가 같다고 되있는데, 비슷하긴한데 같은지는 모르겠다.

 

딕셔너리.setdefault(key[, default])

 

어쨌든 setdefault()도 딕셔너리의 메서드로서 해당 키값을 반환하기는 한다.

그런데 이 메서드는 set이 붙은데서 알 수 있듯이 값을 지정할 수도 있다.

 

 >>> weather = week_dict.setdefault('Fri','강풍')
>>> weather


'강풍'
>>> week_dict
{'Mon': '맑음', 'Tue': '구름', 'Sun': '비', 'Fri': '강풍'}

 

'Fri'는 원래 없는 키였는데, 위와 같이 실행시키자 딕셔너리에 키와 값이 지정되었다.

그러면 기존에 있는 키를 호출하면 어떻게 될까?

그 키에 대한 값을 업데이트 해버릴까?

인자로 넘긴 키가 존재하면 기존에 존재하는 키에 대한 값을 반환하기만 한다.

default값은 무시된다.

 

 >>> weather = week_dict.setdefault('Mon','강풍')
>>> weather


'맑음'

위에서 'Mon'키에 '강풍' 값을 지정했지만, 기존에 'Mon'에 매칭돼 있던 '맑음'값이 반환되었다.

키의 존재여부 확인없이 딕셔너리를 초기화 하기에 좋을것으로 생각된다.

 

 

 

 

 

 

 

 

반응형