0

为什么当我提供输入13. 并在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,它没有返回。

y = input()

if y in d:
        print('key in dictionary')

这些我该怎么办?

4

3 回答 3

3

您正在使用 Python 3 whereinput()返回一个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
于 2013-05-20T08:24:46.213 回答
3

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'}
于 2013-05-20T08:34:06.287 回答
0

首先, 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'

于 2013-05-20T08:31:17.033 回答