0

I have a list of objects that I want to sort. Each object has an id which is a list of strings.

So I defined:

class MyObject(object):
    ...
    def __cmp__(self, other):
        return self.id.__cmp__(other.id)

to which python (2.7) said

object 'list' has no attribute '__cmp__'

So I defined the six 'rich comparison' ... but is there a better way to do it?

4

1 回答 1

3

如果您唯一需要排序的是对对象进行排序key,那么在调用时使用参数可能会更好sorted

sorted(list_of_objects, key=lambda x: x.id)

丰富的比较是首选__cmp__,这就是为什么lists 没有__cmp__.

在您的特定情况下,您可以改用cmp函数,它将为您执行所有比较:

return cmp(self.id, other.id)

顺便说一句,没有必要定义所有六个运算符。

如果运算符左侧的对象没有定义适当的富比较运算符(在 C 级别或使用其中一种特殊方法),则比较反转,并使用相反的运算符调用右侧运算符, 两个对象被交换。这假设 a < b 和 b > a 是等价的,就像a <= band一样b >= a,并且==and!=是可交换的(例如a == b当且仅当b == a)。

于 2013-06-09T09:46:52.520 回答