2017-02-13 3 views
0

Ich bin neu mit Python. Vor kurzem habe ich ein Problem gefunden, bei dem ich eine sortierte Rangliste eines gefälschten Spiels drucken soll.Sortierung von der höchsten zur niedrigsten in einer Datei

Hier ist mein Code:

myfile = open('Results.txt') 
title = '{0:20} {1:20} {2:20} {3:20} {4:20}'.format('Player Nickname','Matches Played','Matches Won','Matches Lost','Points') 
print(title) 
for line in myfile: 
    item = line.split(',') 
    points = int(item[2]) * 3 
    if points != 0: 
     result = '{0:20} {1:20} {2:20} {3:20} {4:<20}'.format(item[0], item[1], item[2], item[3].rstrip(), points) 
     print(result) 

und hier ein paar Beispiele in der Datei

Leeroy,19,7,12 
Jenkins,19,8,11 
Tyler,19,0,19 

ich .rstrip verwenden musste(), um den \ n Escape-Code zu entfernen, um das Format arbeiten richtig.

Gibt es eine wirklich einfache Möglichkeit, die Datei zu sortieren? anstelle von Dingen wie Lambda und nur wirklich komplizierten Sachen?

+1

Hast du irgendwas versucht? –

+0

oh ja, mein Freund lehrte mich mit Lambda, aber es war zu kompliziert, also fragte ich, ob es einen leichteren Weg gibt 'scores = [] myfile = open ('Results.txt') für Zeile in myfile: scores.append (line.split ('')) sortedScores = sortiert (Partituren, key = lambda x: x [2] * 3) ' Codierung verwenden, die einfacher ist –

Antwort

0

sortedScores = sortiert (Partituren, key = lambda x: x [2] * 3)

Sie fast da waren! Alles, was Sie tun musste, ist:

sortedScores = sorted(scores, key=lambda x: int(x[2])*3) 

Sie haben vergessen, bevor Multiplikation


Hier ist ein Weg, um den Wert auf eine ganze Zahl zu konvertieren - fügen Sie einfach die berechneten Punkte, wie Sie die Datei zu lesen, dann sortiere das Ergebnis und drucke es:

data = [] 

for line in myfile: 
    item = line.split(',') 
    points = int(item[2]) * 3 
    item.append(points) 
    data.append(item) 

# Now, sort it, the easiest way is to tell it to sort by the last item 
import operator 
data = sorted(data, key=operator.itemgetter(4), reverse=True) 

# or, you can write a lambda! 
data = sorted(data, key=lambda x: x[4], reverse=True) 

for item in data: 
    result = '{0:20} {1:20} {2:20} {3:20} {4:<20}'.format(*item) 
    print(result) 
+0

zu verstehen, ist es eine ganze gedruckte wiederholte Liste der gleichen Namen, was habe ich falsch gemacht? 'data =() für Zeile in Meinedat: item = line.split ('') Punkte = int (Punkt [2]) * 3 item.append (Punkte) data.append (item) wenn Punkte! = 0: Daten = sortiert (Daten, Schlüssel = Lambda x: x [4], rückwärts = Wahr) für Artikel in Daten: result = '{0:20} {1:20} {2: 20} {3:20} {4: <20} 'Format (Element [0], Element [1], Element [2], Element [3] .rstrip(), Punkte) print (result) ' –

Verwandte Themen