我希望能够从
我可以考虑通过迭代
networkx
的 DiGraph
中删除一个节点,同时保留所有子节点并重新映射它们的边缘到父节点的父节点(或者删除旧的边缘并创建新的边缘)。该节点将基于其节点属性(例如所属组)被删除。请注意,保留 HTML 标签。
例如,我希望以编程方式删除具有属性 Group B
的节点,并将所有直接子节点重新映射到原始父节点(在存在多个祖父母的情况下,我想将其映射到所有祖先)。我可以考虑通过迭代
DiGraph
,查看其直接后继和前任,并在它们之间创建关系,然后删除节点,但是是否有更优雅的方法?for node in DiG.nodes(data=True):
if node[1].get('node_group') == "Group B":
pre = DiG.predecessors(node[0])
suc = DiG.successors(node[0])
for p in pre:
for s in suc:
DiG.add_edge(s, p)
DiG.remove_node(node[0])