将列表的字符串表示形式转换为实际的列表对象

时间:2012-05-27 17:26:46

标签: python string list

我有一个看起来与列表相同的字符串,让我们说:

fruits = "['apple', 'orange', 'banana']"

将其转换为列表对象的方法是什么?

3 个答案:

答案 0 :(得分:100)

>>> fruits = "['apple', 'orange', 'banana']"
>>> import ast
>>> fruits = ast.literal_eval(fruits)
>>> fruits
['apple', 'orange', 'banana']
>>> fruits[1]
'orange'

正如评论ast.literal_eval中指出的那样安全。来自文档:

  

安全地评估表达式节点或包含Python的字符串   表达。提供的字符串或节点可能只包含   以下Python文字结构:字符串,数字,元组,列表,   dicts,booleans和None。

     

这可以用于安全地评估包含Python的字符串   来自不受信任来源的表达式,无需解析   重视自己。

答案 1 :(得分:24)

eval()的简单调用即可:

fruits = eval("['apple', 'orange', 'banana']")
fruits
> ['apple', 'orange', 'banana']

或者正如本article中所解释的那样,可以更安全地完成相同的操作(意思是:不会产生意外的副作用或恶意代码注入的风险),如下所示:

fruits = eval("['apple', 'orange', 'banana']", {'__builtins__':None}, {})

此解决方案的优点是不依赖于其他模块。

答案 2 :(得分:2)

我认为这就是ast.literal_eval的用途。

http://docs.python.org/library/ast.html#ast.literal_eval