Wie sortiere ich eine Liste und behandle keine Werte richtig?

7

Ich versuche, eine Liste von Objekten mit dem Attribut date mit

zu sortieren %Vor%

aber einige Daten sind nur keine, was bedeutet, dass ich den Fehler

bekomme %Vor%

Gibt es eine Möglichkeit, dies zu erklären? z.B. Haben Sie Objekte mit date == None am Anfang oder Ende der sortierten Liste - oder muss ich das manuell tun?

    
carl 12.01.2018, 21:13
quelle

3 Antworten

14

Sie können Ihr Lambda leicht ändern:

%Vor%

Wenn sie am falschen Ende der Sortierung erscheinen, verwenden Sie stattdessen datetime.max .

    
wim 12.01.2018, 21:15
quelle
12

Sie möchten basierend auf zwei Eigenschaften sortieren:

  1. In erster Linie, ob ein Datum vorhanden ist
  2. Zweitens, das Datum (falls vorhanden)

Sie können Ihre Absicht auf einfache Art und Weise ausdrücken, indem Sie nach einem Tupel sortieren, wo

  1. Das erste Element des Tupels gibt an, ob das Datum None und
  2. ist
  3. Das zweite Element des Tupels ist das Datum selbst.
%Vor%

Dieser Ansatz umgeht den Typfehler, den Sie erhalten, weil der Vergleich zwischen Tupeln von links nach rechts träge durchgeführt wird. Die zweiten Tupel-Elemente werden nicht verglichen, es sei denn, die ersten Elemente sind gleich.

Hier sind einige Beispiele, die das Konzept demonstrieren:

%Vor%     
Chris Martin 12.01.2018 23:14
quelle
0

Vielleicht sollten Sie die Daten, die None sind, vor dem Sortieren herausfiltern.

    
Merline Xavier 12.01.2018 21:16
quelle

Tags und Links