list使用operator.attrgetter排序不区分大小写

时间:2011-01-21 14:15:08

标签: python list sorting case-insensitive

嗨,我有词典列表..我想将其排序为不区分大小写

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

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

这里sort_by有我想要排序的属性名称。 现在我怎么能用不区分大小写排序?

请帮助..

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分: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 )

答案 2 :(得分:1)

看来这个问题是关于django的。您可能想要考虑返回已排序的查询集。这意味着您可以将排序保留在数据库中,而不用担心自己。请参阅此网站:django