[Python] 딕셔너리 value로 key 찾기
June 30, 2024
딕셔너리는 key-value 데이터를 저장하는데, value 값으로 key 값을 찾는 방법에 대해서 알아보겠습니다.
딕셔너리는 dict[key]
처럼, key 값으로 value를 쉽게 찾을 수 있지만, value로 key를 찾는 함수는 제공하지 않습니다. 이 때문에, 직접 구현해줘야 합니다.
1. for문을 이용한 방법
아래와 같이 for문으로 딕셔너리를 탐색하면서, 특정 value 값을 갖고 있는 아이템을 찾고, 그 아이템의 key를 찾을 수 있습니다.
- 딕셔너리에서 key는 중복 값이 없지만, value는 중복 값이 있을 수 있어, 특정 value에 대한 key가 1개 이상이 될 수 있음
for key, value in dict_obj.items()
: 딕셔너리를 key, value로 순회keys_list.append(key)
: 특정 value를 갖고 있는 key를 리스트에 저장
def get_keys_by_value(dict_obj, value_to_find):
keys_list = []
for key, value in dict_obj.items():
if value == value_to_find:
keys_list.append(key)
return keys_list
my_dict = {'a': 1, 'b': 2, 'c': 2, 'd': 3}
value_to_find = 2
result = get_keys_by_value(my_dict, value_to_find)
print(result)
Output:
['b', 'c']
2. filter()를 이용한 방법
filter(lambda, items)
는 key-value 쌍을 갖고 있는 items에 대해서 lambda 함수의 조건을 충족하는 요소들만 찾아서 (key, value)
튜플에 대한 iterator를 리턴합니다.
- filter의 리턴 값은 iterator이기 때문에,
list(iterator)
로 리스트로 변환할 수 있음 filter(lambda item: item[1] == value_to_find, my_dict.items())
: value(item[1]
)가 특정 값이면 iterator로 리턴- 찾은 값만 iterator로 리턴하기 때문에, 원본 딕셔너리 값은 변경되지 않음
- 필터의 결과 값은
(key, value)
튜플
my_dict = {'a': 1, 'b': 2, 'c': 2, 'd': 3}
value_to_find = 2
result = list(filter(lambda item: item[1] == value_to_find, my_dict.items()))
print(result)
Output:
[('b', 2), ('c', 2)]
3. 리스트 컴프리헨션을 이용한 방법
for문을 이용하여 직접 value를 비교하여 key를 찾은 것처럼, 리스트 컴프리헨션을 이용하여 동일한 방법으로 구현할 수 있습니다.
def get_keys_by_value(dict_obj, value_to_find):
return [key for key, value in dict_obj.items() if value == value_to_find]
my_dict = {'a': 1, 'b': 2, 'c': 2, 'd': 3}
value_to_find = 2
result = get_keys_by_value(my_dict, value_to_find)
print(result)
Output:
['b', 'c']