构建基于父子关系的嵌套词典?

2024-06-25 23:41:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了一个这样的字典列表:

[
    {'A': ['B', 'C', 'D']},
    {'B': ['E', 'F']},
    {'C': ['E']},
    {'F': ['G', 'H']}
]

字典中的键是相应字典值的父项,即{parent: [child1, child2, child3]}

如何以如下格式构造树型字典,如下所示:

^{pr2}$

如果一个节点没有子节点,我们将用None填充它的值。我不知道如何编写递归过程将列表转换为字典,有什么想法吗?在

谢谢!在


Tags: none列表字典节点过程格式parent树型
2条回答

您可以使用递归:

d = [{'A': ['B', 'C', 'D']}, {'B': ['E', 'F']}, {'C': ['E']}, {'F': ['G', 'H']}]
d1 = dict(list(i.items())[0] for i in d)
def flatten_structure(d, root = 'A'):
  if root:
    return {root:flatten_structure(d1[root], None)}
  return {i:flatten_structure(d1[i], None) if i in d1 else None for i in d}

print(flatten_structure(d1['A']))

输出:

^{pr2}$

可以使用递归函数执行此操作:

def find_set(d, k, v):
    for key, value in d.items():
        if isinstance(value, dict):
            find_set(d[key], k, v)
            return
        if key == k:
            d[key] = {}
            for i in v:
                d[key][i] = None
            return d
    d[k] = {}
    for i in v:
        d[k][i] = None
    return d

代码:

^{pr2}$

d将是:

{'A': {'B': {'E': None, 'F': {'G': None, 'H': None}, 'C': {'E': None}}, 'C': None, 'D': None}}

相关问题 更多 >