Python 如何从dict获取具有特定值的所有项目?
假设我们有一个dictPython 如何从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':
{'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
现在,反向查找与正向查找一样快,尽管您必须首先构造反向查找字典