【问题标题】:How to read a dictionary tree如何阅读字典树
【发布时间】:2019-06-18 09:52:25
【问题描述】:

让我们假设有以下树结构:

a = [(1, 2), (2, 2), (3, 2), (4, 2), (5, 4), (6, 5), (7, 8), (8, 11), (9, 10), (10, 11), (11, 11)]

所以我们得到这个代码Python - Generate a dictionary(tree) from a list of tuples 结构

[{'id': 2, 'Children': [{'id': 1}, {'id': 3}, {'id': 4, 'Children': [{'id': 5, 'Children': [{'id': 6}]}]}]}, {'id': 11, 'Children': [{'id': 8, 'Children': [{'id': 7}]}, {'id': 10, 'Children': [{'id': 9}]}]}]

我的问题:如何获取这本词典特殊节点的所有子节点? 例如:所有 11 的孩子都是:(7, 8, 9, 10) 怎么办?

【问题讨论】:

  • 在创建树的代码中收集数据
  • 没有其他可能吗?假设只有上面的输出......
  • 就像我之前说的那样,但更容易做到这一点

标签: python dictionary tree


【解决方案1】:

您可以使用带有生成器的递归来查找所需的节点子节点。首先,为了以后更容易查找,使用递归来重构树:

data = [{'id': 2, 'Children': [{'id': 1}, {'id': 3}, {'id': 4, 'Children': [{'id': 5, 'Children': [{'id': 6}]}]}]}, {'id': 11, 'Children': [{'id': 8, 'Children': [{'id': 7}]}, {'id': 10, 'Children': [{'id': 9}]}]}]
def rebuild(d):
  return {i['id']:None if 'Children' not in i else rebuild(i['Children']) for i in d}

result = rebuild(data)

现在,应用递归生成器函数:

def get_children(d):
  for a, b in d.items():
    yield a
    if isinstance(b, dict):
       yield from get_children(b)

print(sorted(get_children(result[11])))

输出:

[7, 8, 9, 10]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 2017-07-25
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    相关资源
    最近更新 更多