Вы можете использовать defaultdict
:
from collections import defaultdict
def find_key(dct, n):
dd = defaultdict(list)
for x, y in dct.items():
dd[y].append(x)
return dd[n]
dic1 = {'james':2, 'david':3, 'sandra':3}
print(find_key(dic1, 3))
print(find_key(dic1, 2))
print(find_key(dic1, 1))
Выход:
['david', 'sandra']
['james']
[]
Построение defaultdict из всех ключей и значений оправдано, только если вы будет многократно искать ключи одного и того же набора данных при разных значениях. В противном случае подход Кенни Острома предпочтительнее. В любом случае, вышеприведенное не имеет смысла, если оставить его в том виде, в каком оно есть.
Если вам не очень удобно с генераторами и yield
, вот подход Кенни Острома, переведенный в списки (менее эффективный, чем генераторы, лучше, чем выше для поиска в один выстрел):
def find_key(dct, n):
return [x for x, y in dct.items() if y == n]
Вывод такой же, как и выше.