set_edge_attributes#
- set_edge_attributes(G, values, name=None)[source]#
设置边的属性值或属性值字典。
Warning
在v1.x和v2.x版本之间,参数
values
和name
的调用顺序发生了变化。- Parameters:
- GNetworkX 图
- values标量值,类字典
边属性应设置的值。如果
values
不是字典,则将其视为单个属性值,然后应用于G
中的每条边。这意味着如果您提供了一个可变对象,如列表,对该对象的更新将反映在每条边的属性中。属性名将为name
。如果
values
是字典或字典的字典,它应按边元组键入,以属性值或属性键/值对字典来更新边的属性。对于多图,边元组必须是形式为(u, v, key)
,其中u
和v
是节点,key
是边键。对于非多图,键必须是形式为(u, v)
的元组。- name字符串(可选,默认=None)
如果
values
是标量,则设置的边属性名称。
Examples
在计算图的边的某些属性后,您可能希望分配一个边属性来存储该属性的值,以便每条边都能存储该值:
>>> 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) # 返回边键列表 [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
如果希望将多图属性用于图,必须将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}