在Django中,我有一個列表中的模型對象。如何對python Django對象列表進行排序?
[object, object, object]
每個對象都有「.name」這是標題的東西。
如何按照該標題按字母順序排序?
這不起作用:
catlist.sort(key=lambda x.name: x.name.lower())
在Django中,我有一個列表中的模型對象。如何對python Django對象列表進行排序?
[object, object, object]
每個對象都有「.name」這是標題的東西。
如何按照該標題按字母順序排序?
這不起作用:
catlist.sort(key=lambda x.name: x.name.lower())
catlist.sort(key=lambda x: x.name.lower())
沒有調用lower()
,以下可以被認爲比使用Lambda稍微乾淨:
import operator
catlist.sort(key=operator.attrgetter('name'))
該呼叫加入lower()
,你進入了一個功能組合痛苦的世界。使用Ants Aasma的compose()
在回答中發現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']
這將有助於如果你閱讀錯誤信息,你的代碼點**正好在'x.name'中的點**上 – Marian 2010-05-27 23:31:45