假设有一个字典。
当我使用时,
d={'a':1,'b':2,'c':1}
当我使用时,
d.keys()[d.values(). index(1)]
我得到了'a'
,但是我也想得到'c'
,因为'c'
的值也是1。我该怎么做?
d={'a':1,'b':2,'c':1}
d.keys()[d.values(). index(1)]
我得到了'a'
,但是我也想得到'c'
,因为'c'
的值也是1。我该怎么做?
你可以使用列表推导式,像这样
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])
对于一次性需求,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']
d={'a':1,'b':2,'c':1}
x = filter(lambda k: d[k]==1, d.keys())
print x
['a', 'c']
我不知道它是否比手动循环更高效,可能不是。但它更紧凑、更清晰。