Python networkx 组合图并保留属性
Python networkx compose graphs and preserve attributes
我有两个具有某些节点属性的 networkx 有向图。该属性是一个数组。我想组成这两个图,但数组属性应该合并。当前,它保留属性冲突的第二个图的属性。是否可以组成两个图和merge/update属性如果是列表或字典
G=nx.DiGraph()
G.add_node(1, ids = [1,2,3])
G.add_node(2, ids = [4,5,6])
G.add_node(3, ids = [7])
G.add_edge(1,2)
G.add_edge(1,3)
H=nx.DiGraph()
H.add_node(1, ids = [2,10])
H.add_node(2, ids = [6,8])
H.add_edge(1,2)
F = nx.compose(G,H)
#Currently, it merges like
[(1, {ids=[2,10]}), (2, {ids=[6,8]}), (3, {ids=[7]})]
#I need it like this
[(1, {ids=[1,2,3,2,10]}), (2, {ids=[4,5,6,6,8]}), (3, {ids=[7]})]
在 networkx 中,图存储为(字典的)字典。 nx.compose
基本上是复制第一个图,此处 G
,然后使用第二个图更新图字典,此处 H
。因此,如果节点也在 H
中,则 G
的节点属性将被覆盖。
但是,你可以很容易地“修复”合成后的节点属性:
for node in G.nodes():
if node in H:
F.nodes[node]['ids'] = G.nodes[node]['ids'] + H.nodes[node]['ids']
我有两个具有某些节点属性的 networkx 有向图。该属性是一个数组。我想组成这两个图,但数组属性应该合并。当前,它保留属性冲突的第二个图的属性。是否可以组成两个图和merge/update属性如果是列表或字典
G=nx.DiGraph()
G.add_node(1, ids = [1,2,3])
G.add_node(2, ids = [4,5,6])
G.add_node(3, ids = [7])
G.add_edge(1,2)
G.add_edge(1,3)
H=nx.DiGraph()
H.add_node(1, ids = [2,10])
H.add_node(2, ids = [6,8])
H.add_edge(1,2)
F = nx.compose(G,H)
#Currently, it merges like
[(1, {ids=[2,10]}), (2, {ids=[6,8]}), (3, {ids=[7]})]
#I need it like this
[(1, {ids=[1,2,3,2,10]}), (2, {ids=[4,5,6,6,8]}), (3, {ids=[7]})]
在 networkx 中,图存储为(字典的)字典。 nx.compose
基本上是复制第一个图,此处 G
,然后使用第二个图更新图字典,此处 H
。因此,如果节点也在 H
中,则 G
的节点属性将被覆盖。
但是,你可以很容易地“修复”合成后的节点属性:
for node in G.nodes():
if node in H:
F.nodes[node]['ids'] = G.nodes[node]['ids'] + H.nodes[node]['ids']