将列表的字符串表示转换为列表

我想知道最简单的方法是将如下所示的string列表转换为list

x = u'[ "A","B","C" , " D"]'

即使用户在逗号和逗号之间留有空格。 我还需要处理以下问题:

x = ["A", "B", "C", "D"] 

在Python中。

我知道我可以使用拆分运算符strip()split()空格,并检查非字母表。 但代码变得非常笨拙。 有没有我不知道的快速功能?


>>> import ast
>>> x = u'[ "A","B","C" , " D"]'
>>> x = ast.literal_eval(x)
>>> x
['A', 'B', 'C', ' D']
>>> x = [n.strip() for n in x]
>>> x
['A', 'B', 'C', 'D']

ast.literal_eval:

使用ast.literal_eval,您可以安全地评估表达式节点或包含Python表达式的字符串。 提供的字符串或节点可能只包含以下Python文字结构:字符串,数字,元组,列表,字典,布尔值和无。


eval是危险的 - 你不应该执行用户输入。

如果你有2.6或更新,请使用ast而不是eval:

>>> import ast
>>> ast.literal_eval('["A","B" ,"C" ," D"]')
["A", "B", "C", " D"]

一旦你有了, strip琴弦。

如果您使用的是较旧版本的Python,则可以使用简单的正则表达式来非常接近您想要的内容:

>>> x='[  "A",  " B", "C","D "]'
>>> re.findall(r'"s*([^"]*?)s*"', x)
['A', 'B', 'C', 'D']

这不如ast解决方案好,例如它不能正确处理字符串中的转义引号。 但它很简单,不涉及危险的评估,如果您使用的是较老的Python而没有ast,则可能足够满足您的需求。


无论何时存在串化字典列表, json模块都是更好的解决方案。 json.loads(your_data)函数可用于将其转换为列表。

>>> import json
>>> x = u'[ "A","B","C" , " D"]'
>>> json.loads(x)
[u'A', u'B', u'C', u' D']

同样

>>> x = u'[ "A","B","C" , {"D":"E"}]'
>>> json.loads(x)
[u'A', u'B', u'C', {u'D': u'E'}]
链接地址: http://www.djcxy.com/p/5439.html

上一篇: Convert string representation of list to list

下一篇: Elegant Python function to convert CamelCase to snake