Ste*_* C. 20 python attributes graph networkx
我拥有:在networkx whit节点中导入的图形G和由gml文件加载的egdes.
问题:如何向选定边添加新属性E.
我想做什么:我想为图的特定边E添加新属性'type'.注意:此边缘E不存在属性"type".
我在互联网和这里阅读了很多解决方案,但这些解决方案中没有一个解决了我的问题.实际上我的代码是:
G.edge[id_source][id_target]['type']= value
Run Code Online (Sandbox Code Playgroud)
但是如果我打印G的所有边缘,现在我有n + 1条边,G的所有旧边和新边p =(id_source,id_target,{'type'= value}).此外,旧边E(我想修改的那个)没有新属性'type'.
所以我的代码添加了一个新的边缘(我不想要).
我想更新旧的添加不存在的新属性.
谢谢您的帮助 !
编辑:已解决 感谢Aric和一些技巧我解决了我的问题:
G.edge[id_source][id_target]['type']= value
Run Code Online (Sandbox Code Playgroud)
Ari*_*ric 11
您可能有一个networkx MultiGraph而不是图形,在这种情况下,边缘的属性设置有点小问题.(您可以通过加载节点之间具有多个边缘的图形来获取多图形).您可能在G.edge[id_source][id_target]['type']= value需要时
通过分配属性来破坏数据结构
G.edge[id_source][id_target][key]['type']= value.
以下是Graphs和MultiGraphs的不同工作方式示例.
对于Graph案例,属性的工作方式如下:
In [1]: import networkx as nx
In [2]: G = nx.Graph()
In [3]: G.add_edge(1,2,color='red')
In [4]: G.edges(data=True)
Out[4]: [(1, 2, {'color': 'red'})]
In [5]: G.add_edge(1,2,color='blue')
In [6]: G.edges(data=True)
Out[6]: [(1, 2, {'color': 'blue'})]
In [7]: G[1][2]
Out[7]: {'color': 'blue'}
In [8]: G[1][2]['color']='green'
In [9]: G.edges(data=True)
Out[9]: [(1, 2, {'color': 'green'})]
Run Code Online (Sandbox Code Playgroud)
使用MultiGraphs时,还有一个额外级别的键可以跟踪平行边缘,因此它的工作方式略有不同.如果没有显式设置键,MultiGraph.add_edge()将添加一个带有内部选择键的新边(顺序整数).
In [1]: import networkx as nx
In [2]: G = nx.MultiGraph()
In [3]: G.add_edge(1,2,color='red')
In [4]: G.edges(data=True)
Out[4]: [(1, 2, {'color': 'red'})]
In [5]: G.add_edge(1,2,color='blue')
In [6]: G.edges(data=True)
Out[6]: [(1, 2, {'color': 'red'}), (1, 2, {'color': 'blue'})]
In [7]: G.edges(data=True,keys=True)
Out[7]: [(1, 2, 0, {'color': 'red'}), (1, 2, 1, {'color': 'blue'})]
In [8]: G.add_edge(1,2,key=0,color='blue')
In [9]: G.edges(data=True,keys=True)
Out[9]: [(1, 2, 0, {'color': 'blue'}), (1, 2, 1, {'color': 'blue'})]
In [10]: G[1][2]
Out[10]: {0: {'color': 'blue'}, 1: {'color': 'blue'}}
In [11]: G[1][2][0]['color']='green'
In [12]: G.edges(data=True,keys=True)
Out[12]: [(1, 2, 0, {'color': 'green'}), (1, 2, 1, {'color': 'blue'})]
Run Code Online (Sandbox Code Playgroud)