在Python中,如何通过值获得具有相同值的字典键?

4
假设有一个字典。
d={'a':1,'b':2,'c':1}

当我使用时,

d.keys()[d.values(). index(1)]

我得到了'a',但是我也想得到'c',因为'c'的值也是1。我该怎么做?

3个回答

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])

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']

1
你可以使用过滤函数来查看字典中所有具有所需值的键。
d={'a':1,'b':2,'c':1}
x = filter(lambda k: d[k]==1, d.keys())
print x
['a', 'c']

我不知道它是否比手动循环更高效,可能不是。但它更紧凑、更清晰。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接