2009-07-28 3 views
1

Einigen Python-Code, der einen ungültigen Syntaxfehler werfen hält:Was ist los mit diesem Bit von Python-Code mit Lambda?

stat.sort(lambda x1, y1: 1 if x1.created_at < y1.created_at else -1) 
+0

Gehört das fehlende ")" zum Problem oder ist es ein Tippfehler? – Juergen

+0

Können Sie es auf die ursprüngliche falsche Version zurücksetzen? Sonst ist es verwirrend. –

+0

Sie sollten eine der Antworten akzeptieren, die nützlich waren;););) –

Antwort

8

Dies ist eine bessere Lösung:

stat.sort(key=lambda x: x.created_at, reverse=True) 

Oder, um zu verhindern die Lambda insgesamt:

from operator import attrgetter 
stat.sort(key=attrgetter('created_at'), reverse=True) 
+0

+1; Ich wollte das gerade tun. – JAB

+1

+1, das ist lesbarer als meine Antwort und scheinbar schneller: http://docs.python.org/library/stdtypes.html#typesseq-mutable. –

+0

Gerade hinzugefügt reverse = True, um die ursprüngliche Anforderung zu erfüllen. –

1

Versuchen des and-or trick:

lambda x1, y1: x1.created_at < y1.created_at and 1 or -1 
+4

Der and-oder Hack ist hässlich und nicht mehr nötig. Bedingte Ausdrücke wurden genau eingeführt, um es zu vermeiden. –