按值/权重对字典表示的图形边缘进行排序



我在python中对Graph Edges进行了以下给定的表示,其中顶点是关键点,边权重是值。

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

我需要为一个应用程序(Kruskal的算法)按权重对边缘进行排序。因此,考虑到字典是未排序的,我想将字典转换为元组列表,如下所示。

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

我有两个问题:

  1. 如何创建一个三元组,而不是上面得到的嵌套元组
  2. 除了将Edges字典转换为元组列表之外,还有其他方法可以根据字典值的权重对其进行排序吗

按如下使用元组拆包

>>> 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

请注意,在这种情况下,kv是您的坐标。

最新更新