set_edge_attributes#

set_edge_attributes(G, values, name=None)[源]#

从给定值或字典设置边属性。

警告

参数 valuesname 在 v1.x 和 v2.x 之间的调用顺序已切换。

参数:
GNetworkX 图
values标量值, 类似字典的对象

边属性应设置为什么。如果 values 不是字典,则它被视为一个单一的属性值,该值随后应用于 G 中的每条边。这意味着如果您提供一个可变对象,例如列表,则对该对象的更新将反映在每条边的边属性中。属性名称将是 name

如果 values 是字典或字典的字典,它应该以边元组作为键,对应的值可以是属性值,也可以是用于更新该边属性的属性键/值对字典。对于多重图,边元组必须是 (u, v, key) 的形式,其中 uv 是节点,key 是边键。对于非多重图,键必须是 (u, v) 的形式的元组。

name字符串(可选,默认为 None)

如果 values 是标量,则要设置的边属性的名称。

示例

在计算图的边的某些属性后,您可能希望分配一个边属性来存储每条边的该属性值

>>> G = nx.path_graph(3)
>>> bb = nx.edge_betweenness_centrality(G, normalized=False)
>>> nx.set_edge_attributes(G, bb, "betweenness")
>>> G.edges[1, 2]["betweenness"]
2.0

如果您提供一个列表作为第二个参数,则对列表的更新将反映在每条边的边属性中

>>> labels = []
>>> nx.set_edge_attributes(G, labels, "labels")
>>> labels.append("foo")
>>> G.edges[0, 1]["labels"]
['foo']
>>> G.edges[1, 2]["labels"]
['foo']

如果您提供一个字典的字典作为第二个参数,整个字典将用于更新边属性

>>> G = nx.path_graph(3)
>>> attrs = {(0, 1): {"attr1": 20, "attr2": "nothing"}, (1, 2): {"attr2": 3}}
>>> nx.set_edge_attributes(G, attrs)
>>> G[0][1]["attr1"]
20
>>> G[0][1]["attr2"]
'nothing'
>>> G[1][2]["attr2"]
3

一个图的属性可以用来设置另一个图的属性。

>>> H = nx.path_graph(3)
>>> nx.set_edge_attributes(H, G.edges)

请注意,如果字典包含不在 G 中的边,它们将被静默忽略

>>> G = nx.Graph([(0, 1)])
>>> nx.set_edge_attributes(G, {(1, 2): {"weight": 2.0}})
>>> (1, 2) in G.edges()
False

对于多重图,`values` 字典预计以包含边键的 3 元组作为键

>>> MG = nx.MultiGraph()
>>> edges = [(0, 1), (0, 1)]
>>> MG.add_edges_from(edges)  # Returns list of edge keys
[0, 1]
>>> attributes = {(0, 1, 0): {"cost": 21}, (0, 1, 1): {"cost": 7}}
>>> nx.set_edge_attributes(MG, attributes)
>>> MG[0][1][0]["cost"]
21
>>> MG[0][1][1]["cost"]
7

如果需要将 MultiGraph 属性用于 Graph,您必须将 3 元组的多重边转换为 2 元组的边,并且最后一个多重边的属性值将覆盖之前的值。从前面的例子继续,我们得到

>>> H = nx.path_graph([0, 1, 2])
>>> nx.set_edge_attributes(H, {(u, v): ed for u, v, ed in MG.edges.data()})
>>> nx.get_edge_attributes(H, "cost")
{(0, 1): 7}