Ich möchte die Elemente in einem Wörterbuch mit verschiedenen Komparatorfunktionen bestellen. Bitte beachten Sie meinen Beispielcode unten. Es ist der letzte Teil, der die Funktion cmpRatio mit sorted () verwendet, die nicht funktioniert. Ich bin mir nicht sicher, was ich falsch mache. Vielen Dank im Voraus für eine Idee!
%Vor% Vermeiden Sie cmp
-Funktionen wo möglich, weil sie langsam sind. Sie müssen für jeden Vergleich neu bewertet werden. Durch die Verwendung von key
wird der Schlüssel nur einmal berechnet.
Sie sagen auch, dass Sie nach der Summe der Wertelemente sortieren möchten, aber Sie sortieren nach der Differenz. Die Summe würde wie folgt aussehen:
%Vor% Wie in anderen Antworten erwähnt, geben Sie nicht den richtigen Wert zurück (muss -1,0 oder 1 sein), um wirklich eine cmp
-Funktion definieren zu wollen.
Aber auch wenn Sie nur ein Lambda verwenden, um den Wert zu erhalten, können Sie das durch itemgetter
ersetzen, was schneller sein sollte als eine python-seitige Funktion:
Wenn Sie versuchen, Sortieroperationen zu speichern, wäre es viel besser, die Schlüsselfunktionen zu speichern:
%Vor% Ihre Vergleichsfunktion sollte einen (negativen / Null / positiven) Wert zurückgeben, wenn das erste Argument (kleiner / gleich / größer) als der zweite Wert ist (im Gegensatz zu einem Komparator, der in C ++ auf std::sort(...)
gesetzt ist).
d. statt
%Vor%tue
%Vor%Wenn Sie nach der Summe des Werttupels sortieren möchten (entsprechend Ihrem Kommentar), könnten Sie verwenden:
%Vor%Wenn Sie nach dem Verhältnis (nach Ihrem Code) sortieren möchten:
%Vor%