我在python中有以下给定的Graph Edges表示,其中顶点是键,边权重是值。
Edges = {(1,2):8.3 , (2,3): 4, (3,1):6}
我需要为一个应用程序按重量对边缘进行排序(Kruskal的算法)。因此,鉴于字典未排序,我想将Dictionary转换为元组列表,如下所示。
Edges_List = [(1,2,8.3), (2,3,4), (3,1,6)]
这些可以通过元组的第三个元素作为键进行排序。我用过这个
Edges_list = [(k,v) for k,v in Edges.items()]
但我得到了一个嵌套元组。
Edges_List = [((1,2),8.3), ((2,3),4), ((3,1),6)]
我有两个问题:
答案 0 :(得分: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
是您的坐标。