2016-04-29 15 views
0

Ich habe einen Code, der die Namen alphabetisch aussortiert, und es gibt auch den maximalen Wert des Ergebnisses aus, das durch den Namen erreicht wird. Ich bin jedoch sehr verwirrt darüber, wie ich es erreichen kann, dass die Namen mit der höchsten maximalen Punktzahl auf die niedrigste maximale Punktzahl ausgegeben werden.Sortierung nach höchstem Wert

info = open("resultsA.txt", "r") 
splitting =[line.split(",") for line in info] 
sorting = sorted(splitting, key=lambda v:v[0]) 
results= [(name, max(a+b+c)) for name, a, b, c in sorting] 
for name, score in results: 
    print(name+"-"+score) 
    info.close() 

Der obige Code sortiert die in resultsA.txt nach alphabetischer Reihenfolge gespeicherten Daten und dem Maximalwert I aber es muß die Daten aus dem höchsten Maximalwert auf den niedrigsten maximalen Wert sortieren.

What the code outputs

Thank you very much.

Antwort

1

Die key Sie sortieren ist v[0] und, aus dem Rest Ihres Codes sieht es aus wie v[0] ist der Name. Durch Ändern des Schlüssels zum Sortieren nach der maximalen Punktzahl wird das Problem behoben.

Also zuerst müssen Sie berechnen:

results = [(name, max(a+b+c)) for name, a, b, c in splitting].

Dann Art auf dem zweiten Element jedes Tupel:

results = sorted(results, key = lambda v: v[1])

jedochsorted wird Ihnen die Ergebnisse in der niedrigsten zur höchsten Ordnung standardmäßig (was Sinn macht, denn wir zählen in der Regel). Also in Ihrem Fall müssen Sie auch sagen, ihm die Bestellung rückgängig zu machen:

results = sorted(results, key = lambda v: v[1], reverse=True)

+0

Vielen Dank! Du hast mir unglaublich geholfen! – Nightly

Verwandte Themen