如何获取Networkx图的边属性列表

问题描述

我想知道是否有任何函数可以获取Networkx图的节点/边属性列表

在指定属性名称时,函数get_node_attributes / get_edge_attributes返回属性值。但是我想知道如何获取加权图的属性名称

解决方法

Graph.nodesGraph.edges都使用一个data参数,如果将其设置为True,我们将在元组中返回的节点/边缘属性为(n,dict[data]) ,其中第二项是包含所有属性的字典。这是一个示例:

G = nx.Graph()

G.add_node(2,lat=41.793780,long=3.972440)
G.add_node(4,lat=41.151363,long=54.374512)
G.add_node(5,lat=17.164215,long=13.92541)
G.add_node(6,lat=10.173651,long=30.335611)

G.add_edge(2,4,weight=0.2,length=12)
G.add_edge(5,6,weight=0.6,length=13)

通过如上所述设置data=True,我们得到:

G.nodes(data=True)
NodeDataView({2: {'lat': 41.79378,'long': 3.97244},4: {'lat': 41.151363,'long': 54.374512},5: {'lat': 17.164215,'long': 13.92541},6: {'lat': 10.173651,'long': 30.335611}})

G.edges(data=True)
EdgeDataView([(2,{'weight': 0.2,'length': 12}),(5,{'weight': 0.6,'length': 13})])

如果您只想要一个具有诸如say等属性名称的列表,则可以执行以下操作:

from itertools import chain

set(chain.from_iterable(d.keys() for *_,d in G.edges(data=True)))
# {'length','weight'}

或者在更简单的情况下,我们为每个边具有相同的属性:

list(list(G.edges(data=True))[0][-1].keys())
# ['weight','length']