当我提供输入1
或3
时,为什么下面的程序没有返回任何内容?适用于c
。
#!/usr/local/bin/python3
d = {'a':1, 'b':3, 8:'c'}
x = input()
if x in d.values():
print('In a dictionary')
更新:如果我提供a
或b
,键也相同。它的工作原理。对于8
,它返回none。
y = input()
if y in d:
print('key in dictionary')
我该怎么做呢?
input()
返回一个字符串。下面的代码可能有用:
d = {'a':1, 'b':3, 8:'c'}
x = input()
from string import digits
if x in digits:
x = int(x)
if x in d.values():
print('In a dictionary', x)
>>>
c
In a dictionary c
>>>
3
In a dictionary 3
同样,要检入键,执行:
d = {'a':1, 'b':3, 8:'c'}
x = input()
from string import digits
if x in digits:
x = int(x)
if x in d.values():
print('In a dictionary', x)
if x in d:
print ("In keys!")
输出测试:>>>
1
In a dictionary 1
>>>
a
In keys!
要将键和值转换为字符串,可以使用字典推导式。
>>> d = {'a':1, 'b':3, 8:'c'}
>>> d = {str(x): str(d[x]) for x in d}
>>> d
{'8': 'c', 'a': '1', 'b': '3'}
您正在使用Python 3,其中input()
返回str
。使用
import ast
x = ast.literal_eval(input())
实现您想要的结果(假设您的输入是'c'
(包含引号))
。
>>> import ast
>>> d = {'a':1, 'b':3, 8:'c'}
>>> ast.literal_eval(input()) in d.values()
'c'
True
>>> ast.literal_eval(input()) in d.values()
1
True
首先,input()返回一个字符串,在您的情况下,最好将值转换为字符串以便进行比较,因为您有混合的值类型(不推荐)
x = input()
其次,检查'x'是否'在'd.values()'中可能看起来很快,因为'd.values()'是一个迭代器,但使用'in'将其视为列表。这样做会更快:
for v in d.values():
if x == str(v): # convert v to str
print('In a dictionary')
break
else:
print('NOT In a dictionary')
这使用了"for/else"规则,这意味着如果for循环遍历完'd.values()'中的所有元素而没有'break ',它将触发'else'