排序networkx图形对象Python

har*_*shi 8 python networkx

我想按照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)

  • @邦森:感谢您的提醒。在Python3中,[元组参数解压缩](https://docs.python.org/3/whatsnew/3.0.html#removed-syntax)已删除。我已经更新了上面针对Python3的代码。 (2认同)

gon*_*opp 5

内置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)