mic*_*ela 2 python sorting django
我试图解决如何在python中将字母数字集排序为Django中提出的问题的答案.我有一个查询返回的Django模型实例列表,我无法弄清楚如何使用lambda构建一个优雅(或其他!)排序函数.
如果我的模型包含'name'属性 - 例如
result = Take.objects.all()
for i in result:
print i.name
Run Code Online (Sandbox Code Playgroud)
如何通过name属性对结果对象列表进行排序并应用多个测试?
即我的名字值可以是'1A','1','A1','001A'等
例如,给出这个顺序(基于名称)
1A
2A
10A
A1
A2
A10
A11
B2
B4
Run Code Online (Sandbox Code Playgroud)
用于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']
Run Code Online (Sandbox Code Playgroud)
这是我提供的另一个答案,它定义了一个以"人类"顺序执行字母数字排序的函数.将_human_key函数合并到上面的示例中,您可以:
l.sort(key=lambda x: _human_key(x.name))
print [o.name for o in l]
['a', 'AA', 'AB']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2717 次 |
| 最近记录: |