Programming/Python

.get() 딕셔너리에서 key를 사용해 value 얻기

makeitworth 2021. 5. 4. 01:03

dict_name[key] 

입력 : key

출력: value

 

파이썬의 딕셔너리는 key, value 쌍으로 이루어진 해시형 자료구조이다.

john = {'phone': '01840125784' , 'birthday': '19930512' , 'e-mail': 'johndoe@gmail.com' }

특정 key 값에 있는 value를 호출하고 있으면,

dict_name[key] 를 사용하는데, dict_name.get(key)를 써도 똑같은 값을 return 한다.

 

print(john['phone'])
print(john.get('phone'))

>>

'01840125784'

'01840125784'

 

둘의 차이점은 딕셔너리에 없는 key 값으로 호출할 때 있다.

dict_name[key] 는 KeyError가 발생하지만, dict_name.get(key)는 None을 리턴한다.

print(john['address'])

--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-16-caf6080d7d31> in <module> ----> 1 print(john['address']) KeyError: 'address'

 

print(john.get('address'))

None

 

그리고 get() 괄호 안에, key 가 없을 때, None 대신 출력할 값을 default로 넣어둘 수도 있다.

 

print(john.get('address', 0))

0

 

물론 이렇게 했다고, 딕셔너리 내에 새로운 key와 value가 생성되는 것은 아니다.

john

{'phone': '01840125784', 'birthday': '19930512', 'e-mail': 'johndoe@gmail.com'}

 

.get()의 이러한 특성을 활용할 수 있는데, 

d = {3:1}
l = [1,2,3,4,5,6]

for i in l:
    d[i] = 1
d

{3: 1, 1: 1, 2: 1, 4: 1, 5: 1, 6: 1}

 

이렇게 그냥 1을 할당하는 것과 달리,

d = {3:1}
l = [1,2,3,4,5,6]

for i in l:
    d[i] = d.get(i, 0) + 1
d

{3: 2, 1: 1, 2: 1, 4: 1, 5: 1, 6: 1}

 

get() 과 for 반복문을 활용해 리스트에 key 값이 나오면 딕셔너리의 value를 하나씩 올려주는 코드를 짤 수 있다. (명단이나 재고 관련 문제에서 활용 가능)

 

추가로 value값을 가지고 key값을 출력하고 싶을 땐 어떻게 해야할까? 여러가지 방법이 있지만, dict_name.items를 이용해 key, value 값을 얻어서 찾는 것이 비교적 간단한 것 같다.

my_dict ={"John":1, "Michael":2, "Shawn":3}
find_name = [k for k,v in my_dict.items() if v==3]
find_name[0]

'Shawn'

 

그렇다고는 해도 key값을 이용해 value값을 얻는 것 보다 용이하지 않기 때문에 index를 무엇으로 할 건지 잘 정해서 dictionary에 집어넣는 것이 중요한 것 같다.