我想按照edgeweight的增加顺序对我通过Python中的networkx库读取的图形对象进行排序.似乎sortpython 的命令不适用于图形对象.我确信有一种简单的方法可以对这个对象进行排序,但我不确定如何.任何帮助将不胜感激.
例如,我的前三个边缘是
1 3 5250
1 4 74
1 5 3659
Run Code Online (Sandbox Code Playgroud)
排序后我希望他们的订单改为
1 4 74
1 5 3659
1 3 5250
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我的代码
import networkx as nx
g=nx.read_weighted_edgelist(fname,nodetype=int)
Run Code Online (Sandbox Code Playgroud)
我试图对对象进行排序g.
unu*_*tbu 15
import networkx as nx
edgelist = [
(1, 3, {'weight':5250}),
(1, 4, {'weight': 74}),
(1, 5, {'weight': 3659})]
G = nx.Graph(edgelist)
for a, b, data in sorted(G.edges(data=True), key=lambda x: x[2]['weight']):
print('{a} {b} {w}'.format(a=a, b=b, w=data['weight']))
Run Code Online (Sandbox Code Playgroud)
产量
1 4 74
1 5 3659
1 3 5250
Run Code Online (Sandbox Code Playgroud)
内置sort函数具有带函数的key参数。如果已指定,sort将根据键函数对原始元素的应用结果的顺序对集合进行排序。
>>> sorted([1,2,3], key=lambda x:-x)
[3, 2, 1]
Run Code Online (Sandbox Code Playgroud)
您可以在这里找到更多信息
在您的特殊情况下,如果需要按边缘权重排序,并且具有边缘列表,则需要提供将边缘映射到其权重的函数:
sorted( list_of_edges, key= lambda edge: edge['weight'] )
Run Code Online (Sandbox Code Playgroud)