如何排序Python Django对象列表?

6 投票
2 回答
13427 浏览
提问于 2025-04-15 23:12

在Django中,我有一个模型对象的列表。

[object, object, object]

每个对象都有一个“.name”,这是这个东西的标题。

我该怎么按字母顺序对这个标题进行排序呢?

这个方法不行:

catlist.sort(key=lambda x.name: x.name.lower())

2 个回答

2

如果不调用 lower(),下面的代码看起来会比用 lambda 表达式稍微干净一些:

import operator
catlist.sort(key=operator.attrgetter('name'))

但是一旦你加上 lower() 的调用,就会进入一个让人头疼的函数组合的世界。使用 Ants Aasma 在回答 这个问题 时提到的 compose() 函数,你也能感受到函数式编程的魅力(开个玩笑,其实所有的编程方式都有它们适合的场合和时机):

>>> def compose(inner_func, *outer_funcs):
...     if not outer_funcs:
...         return inner_func
...     outer_func = compose(*outer_funcs)
...     return lambda *args, **kwargs: outer_func(inner_func(*args, **kwargs))
...
>>> class A(object):
...   def __init__(self, name):
...     self.name = name
...
>>> L = [A(i) for i in ['aa','a','AA','A']]
>>> name_lowered = compose(operator.attrgetter('name'), 
                           operator.methodcaller('lower'))
>>> print [i.name for i in sorted(L, key=name_lowered)]
['a', 'A', 'aa', 'AA']
12

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,如果某个条件成立,就执行一段代码;如果不成立,就执行另一段代码。这种情况我们通常会用到“条件语句”。

条件语句就像是一个判断的开关,它会根据你设定的条件来决定接下来要做什么。最常见的条件语句是“if语句”。

简单来说,if语句的工作原理是这样的:你告诉程序“如果这个条件为真,就做这件事;如果不为真,就做另一件事”。这样,程序就能根据不同的情况做出不同的反应。

举个例子,假设你在写一个游戏,想要判断玩家的分数。如果分数超过100分,就给玩家一个奖励;如果没有超过,就什么都不做。这时候你就可以用if语句来实现这个逻辑。

总之,条件语句是编程中非常重要的一部分,它帮助我们让程序根据不同的情况做出不同的决策。

catlist.sort(key=lambda x: x.name.lower())

撰写回答