我在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)]
我有两个问题:
- 如何创建一个三元组,而不是上面得到的嵌套元组
- 除了将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
请注意,在这种情况下,k
和v
是您的坐标。