我有一个我要排序的对象列表。每个对象都有一个id,它是一个字符串列表。
所以我定义了:
class MyObject(object):
...
def __cmp__(self, other):
return self.id.__cmp__(other.id)
到哪个python(2.7)说
object 'list' has no attribute '__cmp__'
所以我定义了六个'丰富的比较'......但是有更好的方法吗?
答案 0 :(得分:3)
如果你唯一需要订购的是排序你的对象,那么在调用key
时使用sorted
参数可能会更好。
sorted(list_of_objects, key=lambda x: x.id)
丰富的比较比__cmp__
更受欢迎,这就是list
没有__cmp__
的原因。
在您的特定情况下,您可以使用cmp
功能代替您执行所有比较:
return cmp(self.id, other.id)
顺便说一下,没有必要定义所有六个运算符。
如果操作员左侧的物体没有定义 适当的丰富比较运算符(在C级或 使用其中一种特殊方法),然后比较相反, 和相反的操作员调用右手操作符, 并且交换了两个对象。这假定a< b和b>一个 与
a <= b
和b >= a
相同,==
和!=
是等效的 可交换的(例如a == b
当且仅当b == a
)。