Python에서는 dictionary 값을 가져오는 방식은 몇 가지가 있지만, 정말 값만 가져오려고 할 때 사용하는 방식에는 대괄호 방식과 get() 방식이 있습니다.
dogs라는 dictionary에서 jindo의 값을 가져오려 할 때, 대괄호 방식을 이용하면 아래와 같이 할 수 있습니다.
dogs = {'welshcorgi' : 'cute', 'jindo' : 'also_cute'}
input : print(dogs['jindo'])
output : 'also_cute'
위와 동일하게 jindo의 값을 가져오지만, 이번에는 get 방식을 이용하도록 하겠습니다.
dogs = {'welshcorgi' : 'cute', 'jindo' : 'also_cute'}
input : print(dogs.get('jindo'))
output : 'also_cute'
위의 2가지 방식이 다르니 input 모양도 다르지만, 결과는 같아 보입니다. 하지만 이 2가지 방식에는 차이가 있습니다. 만약 dictionary에 없는 키의 값을 가져오려는 시도를 하면 대괄호 방식은 에러를 발생하고, get 함수 방식은 에러를 발생하지 않습니다.
우리는 현재 dogs라는 dictionary에서 welshcorgi랑 jindo의 키와 값을 가지고 있습니다. 없는 키 maltese의 값을 가져오도록 해보겠습니다. 아래 예시를 보도록 하겠습니다.
dogs = ['welshcorgi' : 'cute', 'jindo' : 'also_cute']
input : print(dogs['maltese'])
output :
Traceback (most recent call last):
File "<input>", line 1, in <module>
KeyError: 'maltese'
'maltese'라는 keyerror가 발생하는 모습을 볼 수 있습니다.
dogs = ['welshcorgi' : 'cute', 'jindo' : 'also_cute']
input : print(dogs.get('maltese')
output :
input : print(type(dogs['maltese']))
output : <class 'NoneType'>
input : print(dogs.get('maltese','해당 키가 없습니다.')
output : '해당 키가 없습니다.'
get함수 방식에서 'maltese'라는 없는 key의 값을 가져오려고 시도하였지만, output에는 아무것도 나오지를 않습니다. 그러면 없는 key의 값을 가져오려고 할 때 출력되는 값이 무엇인지 확인하려고 type함수를 이용해 보니 output에는 nonetype이 반환되는 것을 확인 할 수 있습니다.
또한, get()방식에서는 만약에 key가 없을 경우에 반환하는 값을 미리 설정할 수 있습니다. 마지막 input내용을 보면, get()함수에 두번째 인자가 바로 없을 경우 반환하는 값을 설정한 모습입니다.
이처럼 대괄호와 get()방식은 차이는 없어보이지만, 없는 key를 가져오려고 할 때는 get()방식이 조금 더 유연해 보입니다. 특히 예상치 못한 에러나 예외처리가 많은 만큼 get()을 이용하여 사전에 예외처리를 해주는 get방식이 안전하게 사용할 수 있을 것 같습니다.