2010-05-26 108 views
1

在Django中,我有一个列表中的模型对象。如何对python Django对象列表进行排序?

[object, object, object] 

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

如何按照该标题按字母顺序排序?

这不起作用:

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

这将有助于如果你阅读错误信息,你的代码点**正好在'x.name'中的点**上 – Marian 2010-05-27 23:31:45

回答

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

没有调用lower(),以下可以被认为比使用Lambda稍微干净:

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

该呼叫加入lower() ,你进入了一个功能组合痛苦的世界。使用Ants Aasmacompose()在回答中发现this other SO question,你也可以看到,是函数式编程的光(我在开玩笑所有的编程范式肯定有自己的时间和地点。):

>>> 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']