d={1:'a', 2:'b', 3:'c', 4:'a', 5:'d', 6:'e', 7:'a', 8:'b'}
value = raw_input("Choose a value to be searched: ")
data = ""
if value in d:
data = d.keys["value"]
print(data)
else:
print "There isn't such value in the dictionary"
所以我写了一个'我想得到钥匙' 1' 但它会跳过" data = d.keys [" value"] print(data)"它打印出" else"
的消息我做错了什么?
答案 0 :(得分:2)
对dict
的遏制检查检查密钥,而不是值,而'a'
是dict
中的值,而不是密钥。
最简单的解决方法是将测试更改为:
if value in d.viewvalues(): # d.values() on Python 3
但这仍然是次优的;您无法在O(1)
的值中执行有效的(dict
)查找(您也不能d.keys[value]
,因为您认为可以;您可以拥有执行第二次线性扫描以找到密钥,或执行更复杂的单次扫描以确定该值是否存在并同时拉出密钥。)
但实际上,您似乎想要将字典翻转,将键作为值,反之亦然。这样做:
d = {1:'a', 2:'b', 3:'c', 4:'a', 5:'d', 6:'e', 7:'a', 8:'b'}
d_inv = {v: k for k, v in d.items()} # Make inverted version of d
value = raw_input("Choose a value to be searched: ")
if value in d_inv:
data = d_inv[value]
print(data)
else:
print "There isn't such value in the dictionary"
您可以有效地执行包含检查和查找(如果不需要d
,则可以使用与d
相同的结构替换d_inv
并使用{{ 1}}而不是d
统一)。
答案 1 :(得分:0)
你可以这样做:
d={1:'a', 2:'b', 3:'c', 4:'a', 5:'d', 6:'e', 7:'a', 8:'b'}
value = 'q'
data = [key for key, val in d.items() if val == value]
if len(data) > 0:
print(data)
else:
print "There isn't such value in the dictionary"
然后你会得到结果
[1,4,7]
答案 2 :(得分:0)
如上所述,您需要价值,这里是另一种选择
if any(d[value] for value in d):
然后,d.keys["value"]
实际上是d[value]