繁体   English   中英

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

[英]How do I convert a string of a list back to a list in python?

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

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'>

并且(在这种简单情况下)通过repr返回字符串:

>>> repr(thelist)
"[['hey', '4A48'], ['hello', '4D42']]"
>>> repr(thelist) == thestring
True

eval可以工作,但是将在字符串内执行任何python代码,这可能会带来安全风险或产生有害的副作用。 使用ast.literal_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

如果您控制输入或可以确保没有人从事任何猴子业务,则可以使用eval

expression参数将被解析并评估为Python表达式(从技术上讲,是一个条件列表)

示例(您必须将代码作为字符串传递):

result = eval("[['hey', '4A48'], ['hello', '4D42']]")

result将是您的列表列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM