使用operator.attrgetter进行不区分大小写的列表排序

5 投票
3 回答
2540 浏览
提问于 2025-04-16 10:23

你好,我有一个字典的列表,我想要对它进行不区分大小写的排序。

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 )

撰写回答