2011-03-14 5 views
2

How to sort alpha numeric set in python에있는 질문에 대한 대답을 장고로 이식하려고합니다. 내가 장고 모델 인스턴스의 목록을 쿼리에 의해 반환 된 및 우아한 (또는 그렇지 않으면!) 정렬 함수를 생성하는 데 람다를 사용하는 방법을 해결할 수 없습니다.Django 모델 객체의 영숫자 목록을 정렬하는 방법

내 모델에 '이름'속성이 포함 된 경우 (예 :

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

이름 속성으로 결과 목록을 정렬하고 여러 가지 테스트를 적용하려면 어떻게해야합니까?

즉 나의 이름 값 '1A', '1', 'A1', '001A'등

예컨대 수 있었다 이 속성의 값으로 개체를 정렬 (이름 기준)이 순서

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

답변

5

사용 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'] 
0

을이 시도 : 그러나

result = Take.objects.order_by('name') 
for x in result: 
    print x 

, 예를 주문 당신이 언급 I가 알고있는 보통의 숫자 (사전 식) 순서가 아닌 . 대신, 그것은 다음과 같습니다 :

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

당신이 정말로 원하는 주문을 원한다면 더 창조적이어야합니다.

+3

나는 명성이 있다면 이것을 표시 할 것이다. 네, 제가 지정한 주문을 정말로 원합니다 ... – michela

+0

귀하의 답변은 완전히 다른 문제에 대한 매우 쉬운 해결책을 제시합니다. – rslnx

관련 문제