有效地对对象列表进行复杂排序

时间:2014-11-01 20:28:17

标签: python performance sorting python-2.7 dictionary

我正在尝试尽快在程序中对对象进行排序。我知道在python 3.x中不推荐使用cmp函数进行排序,并且使用键更快,但我不确定如何在不使用cmp函数的情况下获得相同的功能。

以下是该类的定义:

class Topic:
    def __init__(self, x, y, val):
        self.id = val
        self.x = x
        self.y = y

我有一个充满Topic的字典来浮动键,值对和要排序的主题列表。要排序的Topic列表中的每个主题在此词典中都有一个条目。我需要按字典中的值对主题列表进行排序。如果两个主题的值相差<= .001,则应首先使用ID较高的主题。

这是我正在使用的当前代码:

topicToDistance = {}
# ...
# topicToDistance populated
# ...
topics = topicToDistance.keys()
def firstGreaterCmp(a, b):
  if abs(topicToDistance[a]-topicToDistance[b]) <= .001:
    if a.id < b.id:
      return 1
  if topicToDistance[a] > topicToDistance[b]:
      return 1
  return -1
# sorting by key may be faster than using a cmp function
topics.sort(cmp = firstGreaterCmp)

任何帮助尽快做到这一点都将受到赞赏。

0 个答案:

没有答案