我有一个字符串,像这样:"[['Cheese', 72], ['Milk', 45], ['Bread', 22]]"
。
我想将其转换为列表。我知道我可以使用 eval(string) 来获取列表,但是 eval 让我感到害怕,因为它可能造成灾难(并且因为我可以获得非列表作为有效输出)。是否有另一种更理智/更安全的方法可以将此字符串转换为列表?我知道这是一个列表,任何不是列表的都是无效数据(应该检查和/或抛出错误)。
如果你坚持这样做,你可以使用 ast.literal_eval 函数。
>>> import ast
>>> foo = "[['Cheese', 72], ['Milk', 45], ['Bread', 22]]"
>>> ast.literal_eval(foo)
[['Cheese', 72], ['Milk', 45], ['Bread', 22]]
我相信其他人会告诉你,你可能做错了什么,或者使用像 JSON 这样的库来传输像这样的任意数据结构,我不会不同意。
尝试使用该json
模块:
import json
s = "[['Cheese', 72], ['Milk', 45], ['Bread', 22]]"
s = s.replace("'", '"')
print json.loads(s)
您可以考虑使用该json
模块进行反序列化并确保您的字符串为json 格式。
有关使用此模块的详细信息,请参阅http://docs.python.org/2/library/json.html。
这是一种方法: exec("list = "+foo) 这应该使一个变量 'list' 将字符串中的列表转换为一个真实的列表。这也适用于字符串中的字典、数组、布尔值等。