if语句在python中无法正常工作

时间:2018-03-23 23:56:07

标签: python list if-statement

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"

的消息

我做错了什么?

3 个答案:

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