【发布时间】:2018-08-23 11:25:00
【问题描述】:
我将一个文件解析为一个 Python 列表,我遇到了一个像这样的嵌套列表:
{ 1 4{ 2a 0.0 }{ 3 0.0 }{ 4c 0.0 }{ 5 0.0 } }
我想将它解释为一个列表,但是是嵌套的,所以我希望得到如下的 Python 列表:
[1,4,[2a,0.0],[3,0.0],[4c,0.0],[5,0.0]]
我设法用以下方法做一个正确的字符串:
l = """{ 1 4{ 2 0.0 }{ 3 0.0 }{ 4 0.0 }{ 5 0.0 } }"""
l = l.replace("{\t",",[").replace("\t}","]").replace("{","[").replace("}","]").replace("\t",",")[1:]
我也可以申请l.strip("\t"),这样它是一个列表,但不是嵌套的,否则它会被展平,这是我不想要的。
我尝试使用 ast.literal_eval(l),但它在字符串上失败,例如2a
【问题讨论】:
-
我在这里很困惑。有一个
2a变为2a,但有一个4cc变为4,但在您发布的正确字符串上,但2和4没有任何字符串。正确的输出是什么? -
对不起,打错字了,4c 还是 4c,2a 还是 2a,一般都是字符串,即不加 '''' 就不能用 ast 解析
-
只需按 { 拆分,然后按空格嵌套拆分
-
@E.Serra 你是怎么做到这种按空格嵌套分割的?迭代?
-
要么使用下面的答案,要么使用第一个列表的 for 循环。另外,我建议您删除列表中的空字符串,如果您有多个空白空间,则会生成这些空字符串
标签: python list parsing abstract-syntax-tree