4

我有一个字符串,像这样:"[['Cheese', 72], ['Milk', 45], ['Bread', 22]]"

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

4

4 回答 4

6

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

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

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

于 2013-10-24T23:58:48.140 回答
4

尝试使用该json模块

import json
s = "[['Cheese', 72], ['Milk', 45], ['Bread', 22]]"
s = s.replace("'", '"')
print json.loads(s)
于 2013-10-24T23:58:57.723 回答
1

您可以考虑使用该json模块进行反序列化并确保您的字符串为json 格式

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

于 2013-10-24T23:58:58.643 回答
0

这是一种方法: exec("list = "+foo) 这应该使一个变量 'list' 将字符串中的列表转换为一个真实的列表。这也适用于字符串中的字典、数组、布尔值等。

于 2014-01-21T01:45:36.830 回答