如何阅读字典树

时间:2019-06-18 09:52:25

标签: python dictionary tree

我们假定具有以下树结构:

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) 该怎么办?

1 个答案:

答案 0 :(得分:0)

您可以将递归与生成器一起使用,以查找所需的节点子代。首先,为了便于以后查找,请使用递归来重构树:

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]