所以我有一个实际上是一个列表的字符串,例如:
a = "[['hey', '4A48'], ['hello', '4D42']]"
我希望将其转换回列表。
我希望我的输出是这样的:
a = [['hey', '4A48'], ['hello', '4D42']]
因此它是一个实际的列表而不是字符串。
答案 0 :(得分:6)
您可以使用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'>
和(在这个简单的例子中)通过repr
返回字符串:
>>> repr(thelist)
"[['hey', '4A48'], ['hello', '4D42']]"
>>> repr(thelist) == thestring
True
eval
也可以,但会在字符串中执行任何python代码,这可能存在安全风险或可能产生不必要的副作用。
使用ast.literal_eval
更安全,即使在可信输入上也是如此。
答案 1 :(得分:0)
你可以使用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
答案 2 :(得分:0)
如果您控制输入或确保没有人从事任何猴子业务,您可以使用eval:
表达式参数被解析并作为Python表达式进行评估(从技术上讲,条件列表)
示例(您必须将代码作为字符串传递):
result = eval("[['hey', '4A48'], ['hello', '4D42']]")
result
将是您的列表清单。