1

頂点がキーで、エッジの重みが値であるPythonでのグラフエッジの次の表現がありました。

Edges = {(1,2):8.3 , (2,3): 4, (3,1):6}

1 つのアプリケーション (Kruskal のアルゴリズム) の重みでエッジを並べ替える必要があります。辞書がソートされていないことを考えると、以下のように辞書をタプルのリストに変換したいと思います。

  Edges_List = [(1,2,8.3), (2,3,4), (3,1,6)] 

これらは、タプルの 3 番目の要素をキーとしてソートできます。私はこれを使いました

 Edges_list = [(k,v) for k,v in Edges.items()] 

しかし、これを使用してネストされたタプルを取得します。

 Edges_List = [((1,2),8.3), ((2,3),4), ((3,1),6)]

2 つの質問があります。

  1. 上記のネストされたタプルの代わりに、どうすれば 3 つのタプルを作成できますか?
  2. タプルのリストに変換する以外に、辞書の値である重みで Edges 辞書をソートできるようにする他の方法はありますか?
4

1 に答える 1

0

次のようにタプルアンパックを使用します

>>> import operator
>>> Edges = {(1,2):8.3 , (2,3): 4, (3,1):6}
>>> Edges_list = [(k1,k2,v) for (k1,k2),v in Edges.items() ]
>>> Edges_list
[(1, 2, 8.3), (3, 1, 6), (2, 3, 4)]
>>> Edges_list.sort(key=operator.itemgetter(2))
>>> Edges_list
[(2, 3, 4), (3, 1, 6), (1, 2, 8.3)]

並べ替えられた要素を辞書自体と一緒にループしたい場合は、これを使用できます

>>> for k,v in sorted(Edges, key=Edges.get):
...     # do stuff with edges

kこの場合、とvが座標であることに注意してください。

于 2013-07-20T14:33:40.563 に答える