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

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

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

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

  • 如何删除string的左边部分?
  • 在Java中反转string
  • C#:用分隔符分割string,但在结果中保留分隔符
  • PHP中的多行string
  • AngularJS:从string插入HTML
  • 如何sorting一个IEnumerable <string>
  • 如何从字母数字文本中删除前导零?
  • 在Swift中将Int转换为String
  • 3 Solutions collect form web for “将列表的string表示转换为实际的列表对象”

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