我有一个Python对象列表,我想按照对象本身的属性进行排序。该列表看起来像:
>>> ut
[<Tag: 128>, <Tag: 2008>, <Tag: <>, <Tag: actionscript>, <Tag: addresses>,
<Tag: aes>, <Tag: ajax> ...]
每个对象都有一个计数:
>>> ut[1].count
1L
我需要按照降序的数量对列表进行排序。
我已经看到了几种方法,但我正在寻找Python的最佳做法。
一种可以最快的方式,特别是如果你的列表有很多记录,就是使用operator.attrgetter("count")。但是,这可能会运行在Python的预运算符版本上,所以最好有一个回退机制。您可能需要执行以下操作:
try: import operato
except ImportError: cmpfun= lambda x: x.count # use a lambda if no operator module
else: cmpfun= operator.attrgetter("count") # use operator since it's faster than lambda
ut.sort(key=cmpfun, reverse=True) # sort in-place
# To sort the list in place...
ut.sort(key=lambda x: x.count, reverse=True)
# To return a new list, use the sorted() built-in function...
newlist = sorted(ut, key=lambda x: x.count, reverse=True)