如何在打印Networkx图的边属性时对边的顺序进行排序

问题描述

我正在尝试以排序方式打印Networkx图的边缘属性

例如,

print(sorted(G.edges(data=True))

显示有序的字典

[(3,7,OrderedDict([('w1',9.62),('w2',37.2)])),(3,8,9.42),49.6)]))]

同样,我要打印一个属性(仅w1w2,data = True都打印)作为排序输出

例如,当我尝试

print(sorted(nx.get_edge_attributes(G,'w1').values()))

不起作用。

关于如何显示单个属性的排序输出的任何建议将非常有帮助。

解决方法

nx.get_edge_attributes仅返回实际属性。可能最简单的方法可能是保留G.edges(data=True)结果中的一个属性:

G = nx.Graph()
G.add_edge(3,8,w1= 9.62,w2=37.2)
G.add_edge(3,7,w1= 9.42,w2=49.6)

attr = 'w1'
sorted(((*edge,(attr,d[attr])) for *edge,d in G.edges(data=True)))
# [(3,('w1',9.42)),(3,9.62))]