从 flatten 字典构建嵌套的 Python 字典

Ale*_*and 2 python dictionary

我有以下扁平字典,其中包含每个项目的一个条目,每个项目都包含一个父级和子级属性。

{
    'a': {
        parent: None,
        children: ['b', 'c', 'd']
    },
    'b': {
        parent: 'a',
        children: ['e', 'f', 'g']
    },
    'c': {
        parent: 'a',
        children: []
    },
    'd': {
        parent: 'a',
        children: []
    },
    'e': {
        parent: 'b',
        children: []
    },
    'f': {
        parent: 'b',
        children: ['h']
    },
    'g': {
        parent: 'b',
        children: []
    },
    'h': {
        parent: 'f',
        children: []
    },
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能把它变成一个看起来像这样的嵌套字典?

{
    'a': {
        'b': {
            'e': {},
            'f': {
                'h':
            }
            'g': {}
        },
        'c': {},
        'd': {},
    }
}
Run Code Online (Sandbox Code Playgroud)

Aja*_*234 6

您可以使用递归:

d = {'a': {'parent': None, 'children': ['b', 'c', 'd']}, 'b': {'parent': 'a', 'children': ['e', 'f', 'g']}, 'c': {'parent': 'a', 'children': []}, 'd': {'parent': 'a', 'children': []}, 'e': {'parent': 'b', 'children': []}, 'f': {'parent': 'b', 'children': ['h']}, 'g': {'parent': 'b', 'children': []}, 'h': {'parent': 'f', 'children': []}}
def group(start=None):
   return {a:group(a) for a, b in d.items() if b['parent'] == start}
Run Code Online (Sandbox Code Playgroud)
import json
print(json.dumps(group(), indent=4))
Run Code Online (Sandbox Code Playgroud)

输出:

{
  "a": {
     "b": {
        "e": {},
        "f": {
            "h": {}
        },
        "g": {}
     },
     "c": {},
     "d": {}
  }
}
Run Code Online (Sandbox Code Playgroud)