以 BFS 风格将深度的嵌套字典(森林)写入文本文件

2024-04-07

继续我的旧问题:将深度巨大的嵌套字典(森林)写入文本文件 https://stackoverflow.com/questions/51500003/writing-nested-dictionary-forest-of-a-huge-depth-to-a-text-file

现在我想用BFS风格来写森林遍历: 我有一个巨大的深度字典,代表森林(许多非二叉树),我想处理森林并使用森林中的(父亲,儿子)关系序列创建一个文本文件,即给定字典:

{'a': {'b': {'c': {'x': {}}, 'd': {'p': {}}}, 'g': {}, 'f': {}},
 't': {'r': {'o': {}}, 'y': {}}}

生成的文本文件将如下所示:

(ROOT,b) (ROOT,g) (ROOT,f) (b,c) (b,d) (c,x) (d,p) \n
(ROOT,r) (ROOT,y) (r,o) \n

请注意,我用“ROOT”一词替换了森林中的所有根。

Here is a simple visualization of the forest: forest vosualization

嵌套字典很大,并且递归地迭代它会导致内存运行时错误,因此本问题开头的链接中的“生成器样式”解决方案将是最好的。


d = {'a': {'b': {'c': {'x': {}}, 'd': {'p': {}}}, 'g': {}, 'f': {}}, 't': {'r': {'o': {}}, 'y': {}}}
with open('file', 'w') as f:
    for r, s in d.items():
        q = []
        p = r
        while True:
            for k, v in s.items():
                f.write('(%s,%s) ' % ('ROOT' if p == r else p, k))
                if v:
                    q.append((k, v))
            if not q:
                break
            p, s = q.pop(0)
        f.write('\n')

这输出:

(ROOT,b) (ROOT,g) (ROOT,f) (b,c) (b,d) (c,x) (d,p) 
(ROOT,r) (ROOT,y) (r,o) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以 BFS 风格将深度的嵌套字典(森林)写入文本文件 的相关文章

随机推荐