сортировка списка без учета регистра, используя operator.attrgetter - PullRequest
5 голосов
/ 21 января 2011

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

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 21 января 2011
members_list.sort( key = lambda member: getattr(member,sort_by).lower(), reverse = False )
4 голосов
/ 21 января 2011

Если 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 )
1 голос
/ 21 января 2011

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

...