Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
if语句不';我不能在python中正常工作_Python_List_If Statement - Fatal编程技术网

if语句不';我不能在python中正常工作

if语句不';我不能在python中正常工作,python,list,if-statement,Python,List,If Statement,所以我写了“a”,我想得到“1”键 但是它跳过了“data=d.keys[“value”]print(data)”并向我打印“else”消息 我做错了什么 包含检查dict检查键,而不是值,'a'是dict中的值,而不是键 最简单的修复方法是将测试更改为: 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 = ""

所以我写了“a”,我想得到“1”键 但是它跳过了“data=d.keys[“value”]print(data)”并向我打印“else”消息


我做错了什么

包含检查
dict
检查键,而不是值,
'a'
dict
中的值,而不是键

最简单的修复方法是将测试更改为:

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"
但这仍然是次优的;您无法在
dict
的值中执行有效的(
O(1)
)查找(您也不能像您认为的那样执行
d.keys[value]
;您必须执行第二次线性扫描以找到键,或者执行更复杂的单次扫描以确定该值是否存在并同时拉动键)

但实际上,似乎您希望字典反转,将键作为值,反之亦然。这样做:

if value in d.viewvalues():  # d.values() on Python 3

您可以高效地执行安全壳检查和查找(如果不需要
d
,您可以将
d
替换为与
d\u inv
相同的结构,并使用
d
而不是
d\u inv
统一使用)。

您可以这样做:

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"
然后你就会得到结果


[1,4,7]

如前所述,您需要该值,这里有一个替代方案

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"

然后,
d.keys[“value”]
实际上是
d[value]

中的
检查键,而不是值。(还有其他问题,如
d.keys[“value”]
,因为字符串
“value”
不是对象
)@cᴏʟᴅsᴘᴇᴇᴅ: 是的,编辑错误。我最初使用注释中的
d.values()
d.viewvalues()
作为“默认”版本,然后在键入时注意到OP位于Py2上,并用注释翻转了主要示例,但忘记了修复版本信息。:-)谢谢你的提醒。
if any(d[value] for value in d):