gpt4 book ai didi

python - 如何对 Django 模型对象的字母数字列表进行排序

转载 作者:行者123 更新时间:2023-11-28 22:05:27 24 4
gpt4 key购买 nike

我正在尝试将答案移植到 How to sort alpha numeric set in python 中提出的问题给 Django 。我有一个查询返回的 Django 模型实例列表,但我不知道如何使用 lambda 构建一个优雅的(或其他!)排序函数。

如果我的模型包含“名称”属性 - 例如

result = Take.objects.all()
for i in result:
print i.name

如何按名称属性对生成的对象列表进行排序并应用一些测试?

即我的名字值可以是 '1A','1','A1','001A' 等

例如 给出这个顺序(基于名字)

1A
2A
10A
A1
A2
A10
A11
B2
B4

最佳答案

使用 operator.attrgetter 按属性值对对象进行排序:

import operator

class Foo:
def __init__(self, name):
self.name = name

l = [Foo('AA'), Foo('a'), Foo('AB')]
l.sort(key=operator.attrgetter('name'))
print [o.name for o in l]
['AA', 'AB', 'a']

这是我提供的另一个答案 which defines a function以“人类”顺序执行字母数字排序。将 _human_key 函数合并到上面的示例中,您可以:

l.sort(key=lambda x: _human_key(x.name))
print [o.name for o in l]
['a', 'AA', 'AB']

关于python - 如何对 Django 模型对象的字母数字列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5295087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com