在python中以相同的值在字典中获取键值?

时间:2014-07-25 14:24:46

标签: python dictionary

假设字典

d={'a':1,'b':2,'c':1}

当我使用

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

我得到'a',但我也希望获得'c',因为'c'的值也是1.我该怎么做?

3 个答案:

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

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