如何將顯示層次關系的dict列表轉換為樹?

我有一張單子:

[
    {"node": "root", "children": ["a"]},
    {"node": "a", "children": ["b", "b"]},
    {"node": "b", "children": ["c", "c", "c"]},
    {"node": "c", "children": ["d"]},
]

表示壓縮樹的。我的意思是這個dict列表代表了下面的樹:

我可以把這個dict列表轉換成什么樣的數據結構,這樣我就可以把它擴展成一棵樹?我在想把這張單子翻成這樣:

{"root": [
    {"a": [
        {"b": [
            {"c": [
                {"d": "None"}
              ]
            },
            {"c": [
                {"d": "None"}
              ]
            },
            {"c": [
                {"d": "None"}
              ]
            }
          ]
        },
        {"b": [
            {"c": [
                {"d": "None"}
              ]
            },
            {"c": [
                {"d": "None"}
              ]
            },
            {"c": [
                {"d": "None"}
              ]
            }
          ]
        }
      ]
    }
  ]
}

看起來很混亂,但本質上是一個嵌套的節點到子列表的dict。不太清楚如何做到這一點。任何其他想法來解壓縮這棵樹是歡迎的!

理想的情況是,我可以把它放到一些樹庫中,比如treelib,以獲得列出葉節點、訪問父母、祖父母等數據的方法。

? 最佳回答:

首先,我將轉換為:

l = [
    {"node": "root", "children": ["a"]},
    {"node": "a", "children": ["b", "b"]},
    {"node": "b", "children": ["c", "c", "c"]},
    {"node": "c", "children": ["d"]},
]

變成更可行的格式:

compressed = {e["node"]: e["children"] for e in l}

很簡單:

def expand(compressed, root):
    children = [expand(compressed, n) for n in compressed.get(root, [])]
    return {root: children or "None"}

在您的示例中:

>>> from pprint import pprint
>>> pprint(expand(compressed, "root"))
{'root': [{'a': [{'b': [{'c': [{'d': 'None'}]},
                        {'c': [{'d': 'None'}]},
                        {'c': [{'d': 'None'}]}]},
                 {'b': [{'c': [{'d': 'None'}]},
                        {'c': [{'d': 'None'}]},
                        {'c': [{'d': 'None'}]}]}]}]}

也就是說,我建議不要用字符串"None"替換空的子列表,而只是讓它成為一個空列表(因此只需刪除上面的or "None")。

主站蜘蛛池模板: 精品一区二区在线观看| 亚洲精品精华液一区二区| 中文字幕日韩一区二区三区不卡| 极品少妇一区二区三区四区| 国产精品第一区第27页| 在线观看一区二区精品视频| 日韩人妻一区二区三区免费| 亚洲色欲一区二区三区在线观看| 天天躁日日躁狠狠躁一区| 精品国产一区二区三区香蕉| 亚洲AV综合色区无码一区爱AV | 亚洲国产一区二区三区| 国产乱码精品一区二区三区| 无码av免费一区二区三区试看 | 久久毛片一区二区| 乱子伦一区二区三区| 亚洲电影国产一区| 制服中文字幕一区二区| 日本精品高清一区二区| 狠狠色婷婷久久一区二区三区 | 亚洲日韩AV无码一区二区三区人| 少妇特黄A一区二区三区| 无码av免费一区二区三区| 亚洲永久无码3D动漫一区| 中文字幕精品亚洲无线码一区| 国产在线视频一区二区三区98| 国产福利电影一区二区三区久久老子无码午夜伦不 | 鲁大师成人一区二区三区| 精品一区二区三区在线播放| 国产精品一区二区三区久久| 高清一区二区三区视频| 国产日韩高清一区二区三区| 在线精品国产一区二区三区| 国产精品日本一区二区不卡视频 | www一区二区三区| 97久久精品午夜一区二区| 国产在线观看一区二区三区精品| 好爽毛片一区二区三区四| 亚洲bt加勒比一区二区| 蜜桃AV抽搐高潮一区二区| 国产一区二区三区露脸|