Programming/Python

딕셔너리에서 value를 가지고 key 얻기

makeitworth 2021. 5. 7. 22:43

파이썬의 해시 테이블 자료형인 딕셔너리에서 key를 가지고 값을 얻는 방법은 .get() 메서드를 사용하거나 dict_name[key] 형태로 index 하는 것이다. (참고: rollingsnowball.tistory.com/108)

 

그런데 value를 알고 있을 때, 그 값을 가지는 key를 찾는 것은 좀 더 까다롭다.

 

1. dict_name.items()를 통해서 key, value 쌍을 만들로 for 반복문을 돌려, 일일이 원하는 값과 같은지 비교한다.

my_dict ={"John":1, "Michael":2, "Shawn":3}
def get_key(val):
    for key, value in my_dict.items():
         if val == value:
             return key
 
    return "There is no such Key"
   
print(get_key(1))
print(get_key(2))

[out]

John

Michael

 

2. key 따로, value 따로 리스트를 만든 다음, value의 index를 얻어서 key 리스트에 넣어 찾는다.

my_dict ={"John":1, "Michael":2, "Shawn":3}
 
list_of_key = list(my_dict.keys())
list_of_value = list(my_dict.values())
print("keys: ", list_of_key)
print("values: ", list_of_value)

position = list_of_value.index(1)
print(list_of_key[position])
 
position = list_of_value.index(2)
print(list_of_key[position])

[out]

keys: ['John', 'Michael', 'Shawn']

values: [1, 2, 3]

John

Michael

 

3. 1과 거의 같은데, list comprehension으로 좀 더 짧게 줄였다.

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

[out]

'Shawn'

 

4. key를 활용해 value를 얻기는 더 쉬운 것을 활용하여 value를 key로, key를 value로 바꿔 value로 인덱스를 한다.

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

[out]

'Michael'