2010-05-26 4 views
1

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

[object, object, object] 

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

Как отписаться к этому названию по алфавиту?

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

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

Это помогло бы, если вы читаете сообщения об ошибках, одно для ваших кодовых пунктов ** точно на точке ** в 'x.name' – Marian

ответ

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

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

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

Добавить этот призыв к lower() , и вы входите в мир боли в функциональном составе. Использование Ants Aasma «s 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'] 
Смежные вопросы