如何将用户输入作为字典并在 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