试图解析一个字符串并将其转换为嵌套列表

时间:2013-11-30 03:41:37

标签: python string list types

我是Python的新手并阻止了这个问题:

试图从这样的字符串中去:
    mystring ='[[10,20],[20,50],[[0,400],[50,328],[22,32]],30,12]'

到字符串表示的嵌套列表。基本上,相反     str(mylist)

如果我尝试明显的选择
    list(mystring)

它将每个角色分成不同的元素,我就失去了嵌套。

是否有一个属性列表或str类型,我在文档中错过了(我使用Python 3.3)?或者我是否需要编写执行此操作的函数?

另外,你将如何实现该功能?我不知道创建任意深度的嵌套列表需要什么......

谢谢,

- 路易斯H.

2 个答案:

答案 0 :(得分:4)

调用字符串上的ast.literal_eval函数。

要自己实现它,可以使用递归函数将字符串转换为表示列表的字符串列表。然后这些字符串将传递给函数,依此类推。

  

如果我尝试使用明显的解决方案list(mystring),它会将每个字符分成不同的元素,然后我就会失去嵌套。

这是因为list()实际上从iterable生成了一个列表,list()使用__iter__()字符串方法转换为迭代器。将字符串转换为迭代器时,将生成每个字符。

答案 1 :(得分:2)

或者,如果您希望从字符串到对象进行更一般的转换,我建议使用json模块。与字典一起使用,并返回一个经过验证的真实规范,可以在整个开发人员和Web空间中使用。

import json
nested_list = json.reads(mystring)
# You can even go the other way
mystring == json.dumps(nested_list)
>>> True

此外,有一些方便的方法可以直接处理包含这种字符串表示的文件:

# Instead of
data_structure = json.loads(open(filename).read())
# Just
data_structure = json.load(filename)

dump而不是load

相反

如果你想知道为什么要使用json而不是ast.literal_eval(),这是一个非常明确的观点,你应该阅读this问题。