我有如下字符串:
"sring = [[61252,'1','1','30000','2617','2677','15000','1'],[61252,'2','2','72590','2615','2678','15000','1'],[61252,'3','1','9354','2608','2690','709','1']]"
我想将其转换为常规列表,例如:
list = [[61252,'1','1','30000','2617','2677','15000','1'],[61252,'2','2','72590','2615','2678','15000','1'],[61252,'3','1','9354','2608','2690','709','1']]
然后我可以解析它或做任何可以用列表做的事情。 我尝试拆分字符串,但它不起作用,因为结果是一个字符串。
我什至尝试使用 exec 函数转换它:
exec('func = lambda : {}; func()').string
但是它没有返回任何东西。 有什么(干净的)方法可以将这种字符串转换为适当的列表吗?
请您参考如下方法:
使用literal_eval在围绕 = 拆分字符串之后。请密切注意 = 后面的额外空格,因为这是确保 literal_eval 能够正确处理传递的字符串结构所必需的。否则你将面临异常 IndentationError: unexpected indent
解决方法:
from ast import literal_eval
s = "sring = [[61252,'1','1','30000','2617','2677','15000','1'],[61252,'2','2','72590','2615','2678','15000','1'],[61252,'3','1','9354','2608','2690','709','1']]"
res = literal_eval(s.split('= ')[1])
print(res)
print(type(res))
输出:
[[61252, '1', '1', '30000', '2617', '2677', '15000', '1'], [61252, '2', '2', '72590', '2615', '2678', '15000', '1'], [61252, '3', '1', '9354', '2608', '2690', '709', '1']]
<class 'list'>
额外注意:我注意到您在示例中将列表分配给了一个名为list 的变量。请注意,list 是 Python 中的内置名称,将其用作变量名称会影响内置名称,并可能导致代码出现问题。
