我有一个如下字符串:
"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
但它没有返回任何东西。 有没有(干净的)方法将这种字符串转换为适当的列表?
答案 0 :(得分: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))
输出:
[[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中的内置名称,使用它作为变量名称会影响内置函数,并可能导致代码出现问题。
答案 1 :(得分:1)
在你的情况下,你可以像列表一样切片!最终它是字符列表。
x="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']]"
x=x[x.index('['):x[::-1].index(']')*-1])) # if any trailing chars in staring
你可以使用 x = x [x.index(&#39; [&#39;):]
这将对您的字符串进行切片,然后您可以使用list_x = eval(x)来获取实际列表
答案 2 :(得分:-2)
只需exec
字符串
exec("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']]")