如何对Django模型对象的字母数字列表进行排序
问题描述:
我试图将问题的答案移植到Django的How to sort alpha numeric set in python中。我有一个由查询返回的Django模型实例的列表,我无法弄清楚如何使用lambda来构造一个优雅的(或其他!)排序函数。如何对Django模型对象的字母数字列表进行排序
如果我的模型包含'name'属性 - 例如
result = Take.objects.all()
for i in result:
print i.name
如何使用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']
答
试试这个:
result = Take.objects.order_by('name')
for x in result:
print x
然而,例如命令你提到的是不是一个正常的字母(字典)排序,因为我知道它。相反,它会是:
10A
1A
2A
A1
A10
A11
A2
B2
B4
如果您确实需要您指定的顺序,则必须获得更多的创造性。
如果我有声望,我会将其标记下来。是的,我真的想要我指定的订单... – michela 2011-03-15 07:32:44
您的答案表明非常简单的解决方案,完全是另一个问题。 – rslnx 2014-07-25 15:43:49