如何从dict获取具有特定值的所有项目?

use*_*564 0 python

假设我们有一个字典{'a':1,'b':0,'c':1,'d':0},我们如何获得值为0的所有键?我尝试使用for循环来检查每个项目的值并将密钥返回到列表中但它完全没有意义.

Cla*_*diu 5

对字典的项目使用列表理解,过滤您正在寻找的值:

def keys_of_value(d, value):
    return [key for key, val in d.items() if val == value]
Run Code Online (Sandbox Code Playgroud)

用法:

>>> keys_of_value({'a':1,'b':0,'c':1,'d':0}, 0)
['b', 'd']
Run Code Online (Sandbox Code Playgroud)

请注意,这需要您遍历字典中的所有项目.如果您需要经常这样做,您可能需要构建一个反向查找字典,它将值映射到具有该值的所有键的列表:

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

用法:

>>> 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
Run Code Online (Sandbox Code Playgroud)

现在,反向查找与正向查找一样快,但您必须首先构造反向查找字典.