Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 高效地对对象列表进行复杂排序_Python_Performance_Sorting_Python 2.7_Dictionary - Fatal编程技术网

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

Python 高效地对对象列表进行复杂排序,python,performance,sorting,python-2.7,dictionary,Python,Performance,Sorting,Python 2.7,Dictionary,我正在尽可能快地对程序中的对象进行排序。我知道Python3.x中不推荐使用cmp函数进行排序,并且使用键更快,但我不确定如何在不使用cmp函数的情况下获得相同的功能 下面是该类的定义: class Topic: def __init__(self, x, y, val): self.id = val self.x = x self.y = y 我有一本字典,里面满是要浮动的主题键、值对和要排序的主题列表。要排序的主题列表中的每个主题在此

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

下面是该类的定义:

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

我有一本字典,里面满是要浮动的主题键、值对和要排序的主题列表。要排序的主题列表中的每个主题在此词典中都有一个条目。我需要根据字典中的值对主题列表进行排序。如果两个主题在优化方面有不同的价值,请访问codereview.stackexchange.com-这个问题属于那里。好吧,考虑到代码审查处于测试阶段,我不确定在这里发布是否合适。我不同意,这不仅仅是一个优化问题。这是一个关于如何使用一个策略键函数而不是另一个cmp函数进行排序的问题,有一个合理的理由要这样做,因为Python 3中不再支持cmp。也就是说,您看过了吗?它不会使事情变得更快,但在Python3中可以工作。不,我没见过。谢谢,我很好奇如何在Python3中实现这一点。
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)