提取嵌入在python中的字符串中的多个列表

Meh*_*hdi 1 python string parsing

我有一个像下面这样的字符串:

"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']]"
Run Code Online (Sandbox Code Playgroud)

我想将它转换为常规列表,如:

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']]
Run Code Online (Sandbox Code Playgroud)

然后我可以解析它或做任何可以用列表做的事情.我试图拆分字符串,但它不起作用,因为结果是一个字符串.

我甚至尝试使用exec函数转换它:

exec('func = lambda : {}; func()').string
Run Code Online (Sandbox Code Playgroud)

但它不会返回任何东西.有没有(干净的)方法将这种字符串转换为适当的列表?

idj*_*jaw 6

在分割字符串后使用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))
Run Code Online (Sandbox Code Playgroud)

输出:

[[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'>
Run Code Online (Sandbox Code Playgroud)

额外注意:我注意到您已将示例中的列表分配给名为list的变量.请注意,list是Python中的内置名称,使用它作为变量名称会影响内置函数,并可能导致代码出现问题.