不使用Eval将字符串转换为Python中的列表?

时间:2013-10-24 23:52:35

标签: python string list eval

我有一个字符串,如下所示:"[['Cheese', 72], ['Milk', 45], ['Bread', 22]]"

我想将其转换为列表。我知道我可以使用eval(字符串)来获取列表,但eval让我感到害怕,因为它有可能发生灾难(因为我可以将非列表作为有效输出)。是否有另一种更健全/更安全的方式将此字符串转换为列表?我知道它是一个列表,任何不是列表的都是无效数据(应该检查和/或抛出错误)。

4 个答案:

答案 0 :(得分:4)

尝试使用json module

import json
s = "[['Cheese', 72], ['Milk', 45], ['Bread', 22]]"
s = s.replace("'", '"')
print json.loads(s)

答案 1 :(得分:3)

如果你坚持这样做,你可以使用ast.literal_eval函数。

>>> import ast
>>> foo = "[['Cheese', 72], ['Milk', 45], ['Bread', 22]]"
>>> ast.literal_eval(foo)
[['Cheese', 72], ['Milk', 45], ['Bread', 22]]

我确信其他人会告诉你,你可能做错了什么,或者使用像JSON这样的库来传输像这样的任意数据结构,我不会不同意。

答案 2 :(得分:1)

您可以考虑使用json模块反序列化并确保您的字符串位于json format

有关使用此模块的详细信息,请参阅http://docs.python.org/2/library/json.html

答案 3 :(得分:0)

这是一种方式: exec(“list =”+ foo) 这应该使变量'list'与字符串中的列表转换为真实列表。 这也适用于字符串中的字典,数组,bool等。