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

Ahs*_*san 5 python sorting list case-insensitive

嗨,我有字典列表..我想排序不区分大小写

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

members_list.sort( key = operator.attrgetter( sort_by ), reverse = False )
Run Code Online (Sandbox Code Playgroud)

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

请帮忙..

Win*_*ert 6

members_list.sort( key = lambda member: getattr(member,sort_by).lower(), reverse = False )
Run Code Online (Sandbox Code Playgroud)


mar*_*eau 4

如果sort_by是一个变量,其中包含一个字符串,该字符串具有要用于排序的属性名称并且要使用operator.attrgetter(),则可以使用它将它获取的属性值转换为所有小写字符,以便在排序期间进行比较:

members_list.sort( key = lambda mbr: operator.attrgetter( sort_by )( mbr ).lower(),
                   reverse = False )
Run Code Online (Sandbox Code Playgroud)

尽管像下面这样的代码更容易阅读并且更高效:

get_key = operator.attrgetter( sort_by )
members_list.sort( key = lambda mbr: get_key( mbr ).lower(), reverse = False )
Run Code Online (Sandbox Code Playgroud)