使用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是我想要排序的属性名称。现在我该怎么做才能不区分大小写地排序呢?
请帮帮我……
3 个回答
1
这个问题似乎是关于Django的。你可以考虑返回一个已经排序的查询集。这样的话,排序的工作就交给数据库去做,你就不用自己去操心了。可以看看这个网站:django
6
在编程中,有时候我们会遇到一些问题,特别是在写代码的时候。比如,有些人可能会在代码里用到一些特定的符号或者格式,这些东西如果不理解,就会让人感到困惑。
比如说,代码块的占位符像是
members_list.sort( key = lambda member: getattr(member,sort_by).lower(), reverse = False )
,它们通常用来表示某段代码的地方。你可以把它想象成一个空白的框,里面应该放一些具体的代码内容。
总之,理解这些基本概念会帮助你更好地掌握编程,避免在遇到问题时感到无从下手。
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 )