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

标签 python dictionary tree nested breadth-first-search

继续我的旧问题: 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”一词替换了森林中的所有根。

这是森林的简单可视化: 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) 

关于python - 以 BFS 风格将深度的嵌套字典(森林)写入文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52060788/

相关文章:

python - 使用 lxml `.xpath()` 和 `for` 的意外输出

python - 根据公共(public)字段将两行合并为一行

python - python中从列表中查找具有特定属性值的对象的最快方法?

python - 读取 Keras LSTM 的多个 CSV

python - 如何创建一个字典,其中键是列表中的元素,值是从 1 到 n 的数字?

haskell - 如何在haskell中高效地实现迭代深化搜索?

python - 在 python 中添加追加更新和扩展

python - 如何用 python 中的字典替换部分列名?

javascript - 复选框树

tree - 使用累加器的树的大小