如何对python Django对象列表进行排序?

时间:2010-05-26 20:33:23

标签: python django list sorting

在Django中,我在列表中有一个模型对象。

[object, object, object]

每个对象都有“.name”,这是该东西的标题。

如何按此标题按字母顺序排序?

这不起作用:

catlist.sort(key=lambda x.name: x.name.lower())

2 个答案:

答案 0 :(得分:6)

catlist.sort(key=lambda x: x.name.lower())

答案 1 :(得分:1)

如果没有调用lower(),可以认为以下内容比使用lambda更清晰:

import operator
catlist.sort(key=operator.attrgetter('name'))

将该调用添加到lower(),然后进入功能组合痛苦的世界。使用在Ants Aasma的答案中找到的this other SO question compose(),您也可以看到功能编程的亮点(我在开玩笑。所有编程范例肯定都有自己的时间和地点。 ):

>>> def compose(inner_func, *outer_funcs):
...     if not outer_funcs:
...         return inner_func
...     outer_func = compose(*outer_funcs)
...     return lambda *args, **kwargs: outer_func(inner_func(*args, **kwargs))
...
>>> class A(object):
...   def __init__(self, name):
...     self.name = name
...
>>> L = [A(i) for i in ['aa','a','AA','A']]
>>> name_lowered = compose(operator.attrgetter('name'), 
                           operator.methodcaller('lower'))
>>> print [i.name for i in sorted(L, key=name_lowered)]
['a', 'A', 'aa', 'AA']