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

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

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

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

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

  • string.h和strings.h之间的区别
  • 如何在.NET中格式化string中的花括号(大括号)
  • 如何判断一个string是否在Python中重复?
  • 需要使用Regex对string执行通配符(*,?等)search
  • 检查Java中是否存在枚举
  • 正则expression式允许一个string只包含数字0 - 9和限制长度为45
  • Javastring删除所有非数字字符
  • .NET的String.Normalize是做什么的?
  • 将字节写入文件
  • 在特定的子string之后获取一个string
  • 如何比较python中的两个string?