2014-11-11 4 views

ответ

5

Вы можете сделать это следующим образом:

[key for key, value in some_dict.items() if value == 2] 

Это использует список понимание для перебора пара (key, value) элементов, выбирая те ключи, значение которых равно 2.

Обратите внимание, что для этого требуется линейное поиск через словарь, так что это O (n). Если эта производительность неприемлема, вам, вероятно, потребуется создать и поддерживать другую структуру данных, которая индексирует ваш словарь по значению.

+0

Примером этого ответа-х последнее предложение: 'reverseed_dict = collections.defaultdict (list); для k, v в some_dic t.items(): reverseed_dict [v] .append (k) ' –

0

Ну, вы можете использовать generator для получения найденных ключевых значений, один за другим, вместо того, чтобы возвращать все сразу.

Функция search_keys возвращает генератор

def search_keys(in_dict, query_val): 
    return (key for key, val in in_dict.iteritems() if val == query_val) 

# get keys, one by one 
for found_key in search_keys(some_dict, 2): 
    print(found_key) 
1

вы также можете использовать словарь понимание, если вы хотите, чтобы результат словарь

{ x:y for x,y in some_dict.items() if y == 2} 

выход:

{'c': 2, 'b': 2} 
Смежные вопросы