如何将列表的字符串转换回python中的列表?

如何将列表的字符串转换回python中的列表?,python,string,list,Python,String,List,所以我有一个字符串,它实际上是一个列表,例如: a = "[['hey', '4A48'], ['hello', '4D42']]" 我想把它转换回一个列表 我希望我的输出如下: a = [['hey', '4A48'], ['hello', '4D42']] 因此它是一个实际的列表而不是字符串。您可以使用ast模块解析字符串: >>> import ast >>> thestring = "[['hey', '4A48'], ['hello', '4D4

所以我有一个字符串,它实际上是一个列表,例如:

a = "[['hey', '4A48'], ['hello', '4D42']]"
我想把它转换回一个列表

我希望我的输出如下:

a = [['hey', '4A48'], ['hello', '4D42']]

因此它是一个实际的列表而不是字符串。

您可以使用
ast
模块解析字符串:

>>> import ast
>>> thestring = "[['hey', '4A48'], ['hello', '4D42']]"
>>> thelist = ast.literal_eval(thestring)
>>> print(thelist)
[['hey', '4A48'], ['hello', '4D42']]
>>> type(thelist)
<class 'list'>
>>> print(thelist[0])
['hey', '4A48']
>>> type(thelist[0])
<class 'list'>
eval
也可以工作,但会执行字符串中的任何python代码,这可能会带来安全风险或产生不必要的副作用。
使用
ast.literal\u eval
安全得多,即使在受信任的输入上也是如此。

您可以使用
eval

>>> a = "[['hey', '4A48'], ['hello', '4D42']]"
>>> l=eval(a)
>>> l[0]
['hey', '4A48']
>>> type(l)
list
作为比较:

>>> timeit(ast.literal_eval(a))
100000 loops, best of 3: 15.6 µs per loop

>>> timeit(eval(a))
100000 loops, best of 3: 9.72 µs per loop

如果您控制输入或能够确保没有人做任何胡闹的事情,您可以使用:

expression参数作为Python表达式进行解析和计算(从技术上讲,是一个条件列表)

示例(必须以字符串形式传递代码):

结果=eval(“['hey','4A48'],['hello','4D42']]”)
结果将是您的列表

>>> timeit(ast.literal_eval(a))
100000 loops, best of 3: 15.6 µs per loop

>>> timeit(eval(a))
100000 loops, best of 3: 9.72 µs per loop
result = eval("[['hey', '4A48'], ['hello', '4D42']]")