验证键或值是否存在于字典中,对于char有效,对于number失败



当我提供输入13时,为什么下面的程序没有返回任何内容?适用于c

#!/usr/local/bin/python3
d = {'a':1, 'b':3, 8:'c'}
x = input()
if x in d.values():
        print('In a dictionary')

更新:如果我提供ab,键也相同。它的工作原理。对于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'

相关内容

最新更新