我有一个字符串,如下所示:"[['Cheese', 72], ['Milk', 45], ['Bread', 22]]"
。
我想将其转换为列表。我知道我可以使用eval(字符串)来获取列表,但eval让我感到害怕,因为它有可能发生灾难(因为我可以将非列表作为有效输出)。是否有另一种更健全/更安全的方式将此字符串转换为列表?我知道它是一个列表,任何不是列表的都是无效数据(应该检查和/或抛出错误)。
答案 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等。