如何将用户输入作为字典并在 python 中显示其内容
how to take user input as dictionary and display its content in python
我正在尝试将用户输入作为字典并使用以下代码将其显示在屏幕上
import ast
a = input("Please enter a dictionary: ")
d = ast.literal_eval(a)
print d
but this error is occuring
File "x.py", line 3, in <module>
d = ast.literal_eval(a)
File "/usr/lib64/python2.6/ast.py", line 68, in literal_eval
return _convert(node_or_string)
File "/usr/lib64/python2.6/ast.py", line 67, in _convert
raise ValueError('malformed string')
ValueError: malformed string
ast.literal_eval 用于将字符串转换为 dict 对象,据我猜测你正在插入 {'a':1,'b':1} (dict type) ,然后尝试使用 ast.literal_eval 就可以了。当您将 dict 传递给接受 string) 的函数时,它会出错。如果您想将字典作为字符串,请使用“{'a':1,'b':1}”
代码
>>> import ast
>>> a = input("Please enter a dictionary: ")
Please enter a dictionary: {'a':1,'b':2}
>>> d = ast.literal_eval(a)
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
d = ast.literal_eval(a)
File "/usr/lib/python2.7/ast.py", line 80, in literal_eval
return _convert(node_or_string)
File "/usr/lib/python2.7/ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string
>>> a = input("Please enter a dictionary: ")
Please enter a dictionary: "{'a':1,'b':2}"
>>> a
"{'a':1,'b':2}"
>>> d = ast.literal_eval(a)
>>> d
{'a': 1, 'b': 2}
只需像这样转换为 raw_input
:
import ast
a = raw_input("Please enter a dictionary: ")
d = ast.literal_eval(a)
print d
输出:
{'a': 1, 'b': 2}
解释:
input()
就像做 eval(raw_input(....))
一样,在您的情况下将字符串转换为字典,ast.literal_eval()
期待字符串而不是字典。
还要注意在python3.x处没有raw_input()
因为它被转换为input()
你也可以参考这个post
我编辑了你的代码检查差异。
import ast
a = input('Please enter a dictionary:')
d = ast.literal_eval(str(a))
print d
我正在尝试将用户输入作为字典并使用以下代码将其显示在屏幕上
import ast
a = input("Please enter a dictionary: ")
d = ast.literal_eval(a)
print d
but this error is occuring
File "x.py", line 3, in <module>
d = ast.literal_eval(a)
File "/usr/lib64/python2.6/ast.py", line 68, in literal_eval
return _convert(node_or_string)
File "/usr/lib64/python2.6/ast.py", line 67, in _convert
raise ValueError('malformed string')
ValueError: malformed string
ast.literal_eval 用于将字符串转换为 dict 对象,据我猜测你正在插入 {'a':1,'b':1} (dict type) ,然后尝试使用 ast.literal_eval 就可以了。当您将 dict 传递给接受 string) 的函数时,它会出错。如果您想将字典作为字符串,请使用“{'a':1,'b':1}”
代码
>>> import ast
>>> a = input("Please enter a dictionary: ")
Please enter a dictionary: {'a':1,'b':2}
>>> d = ast.literal_eval(a)
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
d = ast.literal_eval(a)
File "/usr/lib/python2.7/ast.py", line 80, in literal_eval
return _convert(node_or_string)
File "/usr/lib/python2.7/ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string
>>> a = input("Please enter a dictionary: ")
Please enter a dictionary: "{'a':1,'b':2}"
>>> a
"{'a':1,'b':2}"
>>> d = ast.literal_eval(a)
>>> d
{'a': 1, 'b': 2}
只需像这样转换为 raw_input
:
import ast
a = raw_input("Please enter a dictionary: ")
d = ast.literal_eval(a)
print d
输出:
{'a': 1, 'b': 2}
解释:
input()
就像做 eval(raw_input(....))
一样,在您的情况下将字符串转换为字典,ast.literal_eval()
期待字符串而不是字典。
还要注意在python3.x处没有raw_input()
因为它被转换为input()
你也可以参考这个post
我编辑了你的代码检查差异。
import ast
a = input('Please enter a dictionary:')
d = ast.literal_eval(str(a))
print d