dic = {'key1': ["value1", "value2"],
'key2': ["value4", "value5"] }
"value4" in [x for v in dic.values() for x in v]
>> True
我要打印value4的键,而不是True
答案 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迭代dic
和break
。
对于重复调用,最好反转字典以保持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"]
让我知道这是否可以解决问题。