我有一个多边形,边缘没有重量。我想添加一些权重
G=MultiDiGraph():
...
for u, v, data in G.edges_iter(data=True):
G.edge[u][v]['weight'] = None
我得到了以下内容:
('08B', '09B', {}),
('08B', '09B', {}),
('08B', '09B', {}),
('08B', '09B', 1),
('03P', '05T', {}),
('03P', '05T', 1)]
也就是说,它仅在一个实例中添加权重。如何为所有边缘增加重量?
答案 0 :(得分:2)
您遇到的问题是您使用多图中的附加字典访问边的属性。特别是,每个边都有一个副本的字典,因此您可以按如下方式访问给定边的属性:
G.edge[u][v][replicate][attr] = val
因此,如果您想在一对(u, v)
节点之间更新 all 的属性,您可以定义如下函数:
def set_multi_edge_attr(u, v, attr, val):
for repl in G.edge[u][v].keys():
G.edge[u][v][repl][attr] = val
其中repl
表示单个边的副本。这是一个简单的例子:
>>> import networkx as nx
>>> G = nx.MultiDiGraph()
>>> G.add_edges_from([(0, 1), (0, 1), (0, 1)])
>>> G.edges(data=True)
[(0, 1, {}), (0, 1, {}), (0, 1, {})]
>>> set_multi_edge_attr(0, 1, 'weight', 1)
>>> G.edges(data=True)
[(0, 1, {'weight': 1}), (0, 1, {'weight': 1}), (0, 1, {'weight': 1})]