Python 如何阅读字典树

Python 如何阅读字典树,python,dictionary,tree,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)] 所以我们用这个代码得到了结构 [{'id': 2, 'Children': [{'id': 1}, {'id': 3}, {'id': 4, 'Children': [{'id': 5, 'Children': [{'id': 6}]}]}]}, {'id': 11, '

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

a = [(1, 2), (2, 2), (3, 2), (4, 2), (5, 4), (6, 5), (7, 8), (8, 11), (9, 10), (10, 11), (11, 11)]
所以我们用这个代码得到了结构

[{'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)
怎么办?

您可以使用带生成器的递归来查找节点所需的子节点。首先,为便于以后查找,请使用递归重新构造树:

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]

可以对生成器使用递归来查找节点的所需子节点。首先,为便于以后查找,请使用递归重新构造树:

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]

在需要的代码中收集数据。没有其他可能性吗?假设只有上面的输出…但更简单的是这样做,就像我前面说的,在代码中收集数据,在树创建的地方没有其他可能性吗?假设只有上面的输出…但像我前面说的那样做比较容易