2011-01-21 2 views
5

привет у меня есть список словарей .. и я хочу, чтобы отсортировать его случай нечувствительнымсписок сортировки без учета регистра с использованием operator.attrgetter

members = Person.objects.filter(person=person_id) 
members_list = list(members) 

members_list.sort(key = operator.attrgetter(sort_by), reverse = False) 

здесь sort_by есть имя, которым я хочу, чтобы отсортировать атрибут. Теперь как я могу сортировать с регистром без учета?

Пожалуйста, помогите ..

ответ

4

Если sort_by переменная, содержащая строку с именем атрибута, который требуется использовать для сортировки и вы хотите использовать operator.attrgetter(), вы могли бы использовать это, который преобразует значение атрибута, выбирающий для все символы нижнего регистра для сравнения во время сортировки:

members_list.sort(key = lambda mbr: operator.attrgetter(sort_by)(mbr).lower(), 
        reverse = False) 

Хотя что-то вроде следующего легче читать, а также более эффективно:

get_key = operator.attrgetter(sort_by) 
members_list.sort(key = lambda mbr: get_key(mbr).lower(), reverse = False) 
+0

thanx sir its working :) – Ahsan

+0

@ Ахсан: Добро пожаловать ... и, конечно же, это сработало ;-) – martineau

6
members_list.sort(key = lambda member: getattr(member,sort_by).lower(), reverse = False) 
+0

+1 * Это * действительный случай использования для 'баранина da' (по иронии судьбы, вы не использовали бы лямбда для этого на функциональном языке, где у вас есть инструменты, такие как dot '(f.g) (x) = f (g (x))'). Но вам нужно 'getattr (member, sort_by)'. – delnan

+0

sort_by - моя переменная, которая имеет имя атрибута. – Ahsan

+0

@ Ахсан, хорошо, я неправильно понял. Я обновил свой ответ. –

1

Кажется, этот вопрос о Джанго. Возможно, вам захочется подумать о возврате отсортированного набора запросов. Это означает, что вы также можете оставить сортировку базы данных и не беспокоиться о ней самостоятельно. Смотрите на сайте: django

+0

Вы правы, но здесь, в member_list, у меня есть некоторые значения ключа foriegn, через обратную связь. Мне также нужны те, кто в этом списке. поэтому при запросе я не могу использовать order_by. – Ahsan

+0

по этой причине я использовал выше метод сортировки списка. – Ahsan

+0

Часто бывает дешевле сортировать в python, а не в DB, ​​особенно для неиндексированных столбцов. –

Смежные вопросы