if语句不';我不能在python中正常工作
所以我写了“a”,我想得到“1”键 但是它跳过了“data=d.keys[“value”]print(data)”并向我打印“else”消息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 = ""
我做错了什么 包含检查
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):