我该如何解析一个dict对象?

tcp*_*per 0 python python-2.7

我应该如何定义一个有效的功能parsedic()

dic={0:0,
     1:{0:0,
        1:1,
        2:{0:0,},},
     2:{0:{1:0,
           0:{0:0}},},
     3:0}

def parsedic(...):
    ...

print parsedic(dic)
Run Code Online (Sandbox Code Playgroud)

结果:

0->0
3->0
1.0->0
1.1->1
1.2.0->0
2.0.0.0->0
2.0.1->0
Run Code Online (Sandbox Code Playgroud)

dict的键的类型只能是数字或字符串,值只能是数字,字符串或字典.

(为了避免误解,我删掉了很长一段时间以来我试图解决这个问题的词语.)

geo*_*org 7

"压扁"字典的最简单方法是这样的递归生成器:

def parse(dic):
    for k, v in dic.items():
        if isinstance(v, dict):
            for p in parse(v):
                yield [k] + p
        else:
            yield [k, v]

lst = list(parse(dic))
Run Code Online (Sandbox Code Playgroud)

这会创建一个列表列表[[key,key,key,value],[key,key,val] etc],对于您的示例,它将是:

[[0, 0], [1, 0, 0], [1, 1, 1], [1, 2, 0, 0], [2, 0, 0, 0, 0], [2, 0, 1, 0], [3, 0]]
Run Code Online (Sandbox Code Playgroud)

要以所需的格式打印,只需遍历此列表:

for row in parse(dic):
    row = map(str, row)
    print '.'.join(row[:-1]) + '->' + row[-1]
Run Code Online (Sandbox Code Playgroud)

这回答了你的问题,但是如果你首先告诉我们你为什么需要这种转变会有所帮助.也许有更好的方法.