假设字典
d={'a':1,'b':2,'c':1}
当我使用
时d.keys()[d.values(). index(1)]
我得到'a'
,但我也希望获得'c'
,因为'c'
的值也是1.我该怎么做?
答案 0 :(得分:10)
你可以使用列表理解,就像这样
print [key for key in d if d[key] == 1]
它遍历字典的键并检查值是否为1
。如果值为1,则会将相应的键添加到列表中。
或者你可以在Python 2.7中使用dict.iteritems()
,就像这样
print [key for key, value in d.iteritems() if value == 1]
在Python 3.x中,您将对dict.items()
,
print([key for key, value in d.items() if value == 1])
答案 1 :(得分:2)
对于一次性,thefourtheye的答案是最明显和直接的解决方案。现在,如果您需要查找多个值,则可能需要构建“反向索引”:
from collections import defaultdict
def reverse(d):
r = defaultdict(list)
for k, v in d.items():
r[v].append(k)
return r
d={'a':1,'b':2,'c':1}
index = reverse(d)
print index[1]
=> ['a', 'c']
print index[2]
=> ['b']
答案 2 :(得分:1)
您可以使用过滤器功能查看dict中具有所需值的所有键。
d={'a':1,'b':2,'c':1}
x = filter(lambda k: d[k]==1, d.keys())
print x
['a', 'c']
我不知道它是否比手动循环更有效;可能不是。但它更紧凑,更清晰。