将列表的string表示转换为实际的列表对象

我有一个看起来与列表完全相同的string,让我们说:

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

将它转换为列表对象的方式是什么?

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

正如在评论ast.literal_eval是安全的 。 从文档:

安全地评估expression式节点或包含Pythonexpression式的string。 提供的string或节点可能只包含以下Python文字结构:string,数字,元组,列表,字典,布尔值和无。

这可以用来从不受信任的来源安全地计算包含Pythonexpression式的string,而不需要自己parsing这些值。

简单的调用eval()将会做到:

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

或者如本文所述,同样的事情可以更安全一些(意思是:不冒冒用意外的副作用或恶意代码注入的风险):

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

该解决scheme具有不依赖于附加模块的优点。

我认为这是ast.literal_eval的目的。

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