3

我有一个字符串:

s= "[7, 9, 41, [32, 67]]"

我需要将该字符串转换为列表:

l= [7, 9, 41, [32, 67]]

问题是,当我使用列表时,我得到了这个:

['[', '7', ',', ' ', '9', ',', ' ', '4', '1', ',', ' ', '[', '3', '2', ',', ' ', '6', '7', ']', ']']

我正在使用 python 3.2

4

6 回答 6

4

可以使用以下命令完全按照您的要求进行操作ast.literal_eval()

>>> ast.literal_eval("[7, 9, 41, [32, 67]]")
[7, 9, 41, [32, 67]]

但是,您可能首先希望使用像 JSON 这样的健全的序列化格式,而不是依赖 Python 对象的字符串表示。(附带说明一下,您拥有的字符串甚至可能是 JSON,因为此特定对象的 JSON 表示形式看起来与 Python 字符串表示形式相同。由于您没有提到 JSON,我假设这不是您以前使用的得到这个字符串。)

于 2012-09-16T14:26:07.760 回答
2

使用该ast模块,它有一个方便的.literal_eval()功能

import ast

l = ast.literal_eval(s)

在 python 提示符下:

>>> import ast
>>> s= "[7, 9, 41, [32, 67]]"
>>> ast.literal_eval(s)
[7, 9, 41, [32, 67]]
于 2012-09-16T14:25:48.557 回答
2

你想使用ast.literal_eval

import ast
s= "[7, 9, 41, [32, 67]]"
print ast.literal_eval(s)
# [7, 9, 41, [32, 67]]
于 2012-09-16T14:25:51.790 回答
0

使用:封装 ast:函数:literal_eval(node_or_string)

http://docs.python.org/library/ast.html#module-ast

于 2012-09-16T15:24:08.347 回答
0

这是另一个答案,但我不建议你。因为exec很危险。

>>> s= "[7, 9, 41, [32, 67]]"
>>> try:
...   exec 'l = ' + s
...   l
... except Exception as e:
...   e
[7, 9, 41, [32, 67]]
于 2017-01-11T04:22:19.767 回答
0

为什么不使用eval()

>>> s = "[7, 9, 41, [32, 67]]"
>>> eval(s)
[7, 9, 41, [32, 67]]
于 2017-04-12T01:47:04.910 回答