2011-10-29 2 views

답변

2

의 인수는 이며 속성이 아닙니다. 당신이 찾고있는 것은 :

class Prediction(): 
    def __init__(self, l): 
     self.start = l[0] 
     self.end = l[1] 
     self.score = l[2] 

    def __lt__(self, other): 
     return self.start < other.start 

이 의지가 자동으로이 클래스의 인스턴스의 반복 가능한 주문 sorted 수 있습니다.

실제로 파이썬에서 정렬하는 데는 __lt__ 만 필요하지만 PEP8은 모든 비교 기능을 구현하거나 total_ordering 데코레이터를 사용하는 것이 좋습니다.

+1

FWIW, PEP 8은 __lt__을 사용하여 구현하는 것이 아니라 6 가지의 풍부한 비교를 모두 정의 할 것을 권장합니다. 또는, functools.total_ordering을 사용하여 누락 된 메소드를 채울 수 있습니다. –

+0

@RaymondHettinger 이미 내 게시물 중 다른 것에 대한 이전 코멘트를 기반으로하는 내용이 이미 포함되어 있습니다. 세부 사항을 추가하기 전에 핵심 답변을 얻고 싶었습니다. – agf

+0

항상 한 필드로 정렬하려는 경우이 솔루션이 마음에 듭니다. 예를 들어'start'가'Prediction' 클래스의 열쇠라면, 나는이 메소드를 선호합니다. – zzz

4
predictions_start_order = sorted(predictions, key=lambda x: x.start) 
+3

키 함수를 사용하려면'lambda '대신'operator.attrgetter ('start ')'를 사용하십시오. – agf

+2

@agf 왜? 실제로 나는이 표기법을 훨씬 덜 읽을 만하다고 본다. – log0

+0

@agf operator.attrgetter에 추가 가져 오기가 필요하다는 사실을 좋아하지 않습니다. 나는 두 가지 해결책 모두가 판독 가능하다고 생각한다. – zzz

관련 문제