8

我想对我通过 Python 中的 networkx 库读取的图形对象进行排序,以边缘权重的递增顺序。似乎sortpython的命令不适用于图形对象。我确信有一种简单的方法可以对这个对象进行排序,但我不确定如何。任何帮助将不胜感激。

例如,我的前三个边是

1 3 5250
1 4 74
1 5 3659

排序后,我希望他们的顺序更改为

1 4 74
1 5 3659
1 3 5250

到目前为止,这是我的代码

import networkx as nx
g=nx.read_weighted_edgelist(fname,nodetype=int)

我正在尝试对对象进行排序g

4

2 回答 2

17
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']))

产量

1 4 74
1 5 3659
1 3 5250
于 2012-12-23T14:33:08.050 回答
6

内置sort函数有一个key接受函数的参数。如果指定, sort 将按照 key 函数应用于原始元素的结果的顺序对集合进行排序。

>>> sorted([1,2,3], key=lambda x:-x)
[3, 2, 1]

你可以在这里找到更多信息

在您的特定情况下,如果您需要按边权重排序并且您有边列表,则需要提供将边映射到其权重的函数:

sorted( list_of_edges, key= lambda edge: edge['weight'] ) 
于 2012-12-23T14:30:07.930 回答