Как получить весь предмет с определенным значением из dict?

Допустим, у нас есть dict {'a':1,'b':0,'c':1,'d':0}, как мы можем получить все ключи со значением 0? Я попытался использовать цикл for, чтобы проверить значение каждого элемента и вернуть ключ в список, но он совершенно не имеет смысла.

1 ответ

Используйте представление списка по элементам словаря, фильтруя для значения, которое вы ищете:

def keys_of_value(d, value):
 return [key for key, val in d.items() if val == value]

Применение:

>>> keys_of_value({'a':1,'b':0,'c':1,'d':0}, 0)
['b', 'd']

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

def reverse_dict(d):
 res = {}
 for key, val in d.items():
 res.setdefault(val, []).append(key)
 return res

Применение:

>>> rev = reverse_dict({'a': 1, 'b': 0, 'c': 1, 'd': 0})
>>> rev
{0: ['b', 'd'], 1: ['a', 'c']}
>>> rev[0]
['b', 'd']
>>> rev[1]
['a', 'c']
>>> rev[2]
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
KeyError: 2
</module></stdin>

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

licensed under cc by-sa 3.0 with attribution.