我正在研究一个使用networkx中的有向图创建家谱的函数,其中节点是家庭成员,出生日期作为节点属性。现在我想做的是创建另一个函数,给定图形 G 和节点的名称,返回该节点的所有“孙子”的排序列表。所以基本上,我这样做:
return sort(G.successors(G.successors(node)))
但由于G.successors
返回一个后继者列表,这不起作用。
你会如何处理这个问题?
谢谢!
我正在研究一个使用networkx中的有向图创建家谱的函数,其中节点是家庭成员,出生日期作为节点属性。现在我想做的是创建另一个函数,给定图形 G 和节点的名称,返回该节点的所有“孙子”的排序列表。所以基本上,我这样做:
return sort(G.successors(G.successors(node)))
但由于G.successors
返回一个后继者列表,这不起作用。
你会如何处理这个问题?
谢谢!
您可以为此任务编写自己的函数。如果你确定你的DiGraph
是一棵树,你可以set()
用list
. 还请在您的下一个问题中添加一个具有所需输出的最小可重复示例。
import networkx as nx
family_tree = nx.DiGraph()
family_tree.add_edges_from([("GP", "P1"), ("GP", "P2"), ("P1", "S1"), ("S1", "GS1"), ("P1", "S2")])
def successors_of_successors(graph, node):
results = set()
for successor in graph.successors(node):
results.update(graph.successors(successor))
return results
print(successors_of_successors(family_tree, "GP"))
# {'S2', 'S1'}
print(successors_of_successors(family_tree, "P1"))
# {'GS1'}