在Django中,我在列表中有一个模型对象。
[object, object, object]
每个对象都有“.name”,这是该东西的标题。
如何按此标题按字母顺序排序?
这不起作用:
catlist.sort(key=lambda x.name: x.name.lower())
答案 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']