对引用对象的元组进行排序

时间:2018-06-19 10:41:03

标签: python sorting

我正在尝试对元组列表进行排序。每个元组表示网格x和y值。我想根据它们代表的网格对象属性对元组进行排序。

例如:

我的y * x elements网格,其中每个元素都有一个名为node的对象。每个节点都有一个名为globalGoal的属性。

list a = [(1, 2), (2, 4)]

(1, 2) reference grid[1][2]

grid[1][2] = node

node.globalGoal = (int) value is the value I wish to sort

if (1, 2) represents the globalGoal value of 75 and
   (2, 4) represents the globalGoal value of 45 then
I want my list ordered as
[(2, 4), (1, 2)]

我从其他stackoverflow答案中汇总的测试代码是:

class getSortedKey:
  global grid

  def __init__(self, node):
    self.node = grid[node[0]][node[1]].globalGoal

  def __cmp__(self, othernode):
    return(cmp(self.node, othernode))

a = [(1, 2), (2, 4)]
a.sort(key=lambda b: getSortedKey(b))

首先我在将包含所有节点的网格列表放入类中时遇到问题,其次我得到错误:

'<'

的实例之间不支持TypeError:'getSortedKey' and 'getSortedKey'

我是朝着正确的方向前进,还是有一种简单的方法来实现这一目标。

我可以通过编写自己的排序功能(冒泡排序)来实现我想要的,但它太慢了。我的下一步是写一个快速排序,但我正在努力在我的特定场景中进行排序,所以我认为使用Pythons自己的排序会好得多,但显然我已经撞墙了。

感激不尽的任何帮助。我已经搜索了类似的答案,但似乎没有什么是我需要的(除非我误解了其他答案)

1 个答案:

答案 0 :(得分:0)

  

我是朝着正确的方向前进,还是有一种简单的方法来实现这一目标。

确实有一种更为简单的方式......

a.sort(key=lambda c: grid[c[0]][c[1]].globalGoal)