Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从dict获取具有特定值的所有项目?_Python - Fatal编程技术网

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

Python 如何从dict获取具有特定值的所有项目?,python,Python,假设我们有一个dict{'a':1,'b':0,'c':1,'d':0},我们如何获得值为0的所有键?我尝试使用for循环检查每个项目的值,并将键返回到列表中,但这完全没有意义。对字典中的项目使用列表理解,筛选您要查找的值: 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':

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

对字典中的项目使用列表理解,筛选您要查找的值:

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']
>>> 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
请注意,这需要迭代字典中的所有项。如果需要经常执行此操作,可能需要构造一个反向查找字典,该字典将值映射到具有该值的所有键的列表:

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

>>> keys_of_value({'a':1,'b':0,'c':1,'d':0}, 0)
['b', 'd']
>>> 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
rev=reverse_dict({'a':1,'b':0,'c':1,'d':0}) >>>修订版 {0:['b','d',1:['a','c']} >>>修订版[0] ['b','d'] >>>修订版[1] ['a','c'] >>>修订版[2] 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 关键错误:2
现在,反向查找与正向查找一样快,不过您必须先构建反向查找字典。

对字典中的项目进行列表理解,筛选您要查找的值:

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']
>>> 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
请注意,这需要迭代字典中的所有项。如果需要经常执行此操作,可能需要构造一个反向查找字典,该字典将值映射到具有该值的所有键的列表:

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

>>> keys_of_value({'a':1,'b':0,'c':1,'d':0}, 0)
['b', 'd']
>>> 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
rev=reverse_dict({'a':1,'b':0,'c':1,'d':0}) >>>修订版 {0:['b','d',1:['a','c']} >>>修订版[0] ['b','d'] >>>修订版[1] ['a','c'] >>>修订版[2] 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 关键错误:2 现在,反向查找与正向查找一样快,尽管您必须首先构造反向查找字典