1

我在 python 中有以下给定的图形边缘表示,其中顶点是键,边权重是值。

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

我需要为一个应用程序(克鲁斯卡尔算法)按重量对边缘进行排序。因此,鉴于字典未排序,我想将字典转换为元组列表,如下所示。

  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 字典进行排序,除了将其转换为元组列表之外,这是一个字典值?
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

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

于 2013-07-20T14:33:40.563 回答