8

Pythonのnetworkxライブラリで読み取ったグラフオブジェクトを、エッジウェイトの昇順で並べ替えたいと思います。Pythonのsortコマンドはグラフオブジェクトには適用されないようです。このオブジェクトを並べ替える簡単な方法があると確信していますが、方法がわかりません。どんな助けでもありがたいです。

たとえば、私の最初の3つのエッジは

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は、元の要素にキー関数を適用した結果の順序に従ってコレクションをソートします。

>>> 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 に答える