Как отсортировать список объектов Python Django? - PullRequest
2 голосов
/ 27 мая 2010

В Django у меня есть объект модели в списке.

[object, object, object]

У каждого объекта есть «.name», которое является названием вещи.

Как отсортировать по алфавиту по этому заголовку?

Это не работает:

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

Ответы [ 2 ]

6 голосов
/ 27 мая 2010
catlist.sort(key=lambda x: x.name.lower())
1 голос
/ 27 мая 2010

Без вызова lower() следующее можно считать немного чище, чем при использовании лямбды:

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

Добавьте этот вызов к lower(), и вы войдете в мир боли при составлении функций. Используя Ants Aasma compose(), найденные в ответе на этот другой вопрос SO , вы также можете увидеть свет, который является функциональным программированием (я шучу. Все парадигмы программирования наверняка иметь свое время и место.):

>>> 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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...