我是Python的新手并阻止了这个问题:
试图从这样的字符串中去:
mystring ='[[10,20],[20,50],[[0,400],[50,328],[22,32]],30,12]'
到字符串表示的嵌套列表。基本上,相反 str(mylist)
如果我尝试明显的选择
list(mystring)
它将每个角色分成不同的元素,我就失去了嵌套。
是否有一个属性列表或str类型,我在文档中错过了(我使用Python 3.3)?或者我是否需要编写执行此操作的函数?
另外,你将如何实现该功能?我不知道创建任意深度的嵌套列表需要什么......
谢谢,
- 路易斯H.
答案 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问题。