如果一个键存在更多值,如何在python词典中为特定值打印键?

时间:2018-07-09 10:25:06

标签: python dictionary

 dic = {'key1': ["value1",  "value2"],
        'key2': ["value4", "value5"] }

 "value4" in [x for v in dic.values() for x in v]
 >> True

我要打印value4的键,而不是True

5 个答案:

答案 0 :(得分:2)

python字典经过优化,可通过键而不是反向键来访问值,因此,这里没有比遍历字典中的所有条目更好的选择了:

Incorrect syntax near 'REPLACE'.

答案 1 :(得分:1)

您可以使用过滤器。

dic = {'key1': ["value1",  "value2"],
        'key2': ["value4", "value5"] }
filter(lambda x: "value4" in dic[x], dic)         # python 2
list(filter(lambda x: "value4" in dic[x], dic))   # python 3

答案 2 :(得分:1)

使用列表理解。

例如:

dic = {'key1': ["value1",  "value2"],
        'key2': ["value4", "value5"] }
print( [k for k,v in dic.items() if "value4" in v])

输出:

['key2']

答案 3 :(得分:1)

对于孤立呼叫,您应按照@IvayloStrandjev's solution迭代dicbreak

对于重复调用,最好反转字典以保持O(1)查找的复杂性。假设您的值不重叠:

dic = {'key1': ["value1",  "value2"],
       'key2': ["value4", "value5"]}

dic_reverse = {w: k for k, v in dic.items() for w in v}

print(dic_reverse)

{'value1': 'key1', 'value2': 'key1', 'value4': 'key2', 'value5': 'key2'}

然后,您可以通过dic_reverse.get('value4', None)检索密钥。

答案 4 :(得分:1)

不确定是否要这样做,但是您可以-

[k for k, v in dic.iteritems() for i in v if i == "value1"]

让我知道这是否可以解决问题。