自定义Python列表sorting

我正在重构我的一些旧的代码,碰到这个:

alist.sort(cmp_items) def cmp_items(a, b): if a.foo > b.foo: return 1 elif a.foo == b.foo: return 0 else: return -1 

代码的作品(我写了3年前),但我无法find这个东西logging在Python文档中的任何地方,每个人都使用sorted()来实现自定义sorting。 有人可以解释为什么这个工程?

这是logging在这里 。

sort()方法使用可选参数来控制比较。

cmp指定两个参数(列表项)的自定义比较函数,根据第一个参数是小于,等于还是大于第二个参数,它应该返回负数,零或正数:cmp = lambda x,y :cmp(x.lower(),y.lower())。 默认值是None。

作为一个方面说明,这是一个更好的替代实施相同的sorting:

 alist.sort(key=lambda x: x.foo) 

或者:

 import operator alist.sort(key=operator.attrgetter('foo')) 

检查sorting如何 ,这是非常有用的。

就像这个例子。 你想sorting这个列表。

 [('c', 2), ('b', 2), ('a', 3)] 

输出:

 [('a', 3), ('b', 2), ('c', 2)] 

你应该sorting元组和第一个元组

 def letter_cmp(a, b): if a[1] > b[1]: return -1 elif a[1] == b[1]: if a[0] > b[0]: return 1 else: return -1 else: return 1 

最后:

只是sort(letter_cmp)