如何获取 Networkx 图的边属性列表
How to get the list of edge attributes of a Networkx graph
我想知道是否有任何函数可以获取 Networkx 图的 node/edge 属性列表
函数get_node_attributes
/get_edge_attributes
returns指定属性名称时的属性值。但是我想知道如何获取加权图的属性名称。
Graph.nodes
和 Graph.edges
都采用 data
参数,如果将其设置为 True
我们将在元组中返回 node/edge 属性作为 (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, 4, {'weight': 0.2, 'length': 12}),
(5, 6, {'weight': 0.6, 'length': 13})])
如果您只想要一个带有边的属性名称的列表,您可以这样做:
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']
我想知道是否有任何函数可以获取 Networkx 图的 node/edge 属性列表
函数get_node_attributes
/get_edge_attributes
returns指定属性名称时的属性值。但是我想知道如何获取加权图的属性名称。
Graph.nodes
和 Graph.edges
都采用 data
参数,如果将其设置为 True
我们将在元组中返回 node/edge 属性作为 (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, 4, {'weight': 0.2, 'length': 12}),
(5, 6, {'weight': 0.6, 'length': 13})])
如果您只想要一个带有边的属性名称的列表,您可以这样做:
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']