2016-03-19 10 views
0

Ich habe eine Datei und unten ist ein Ausschnitt davon, wie es aussieht. Ich habe diese Wörter mit einer zugehörigen Punktzahl. Wie kann ich die Duplikate entfernen, die eine niedrigere Punktzahl haben? Ich meine "frisch" hat zwei Punkte (7.781 und 5.750), ich versuche "frische" und andere doppelte Begriffe mit der niedrigeren Punktzahl zu entfernen. Ist es möglich, so?Wie entferne ich doppelte Begriffe mit Bewertungen aus einer Textdatei?

['norwegian', 7.781341354126479] 
['rp', 7.7802465301013] 
['fresh', 7.7721646246757885] 
['tick', 7.7721646246757885] 
['wood', 7.7721646246757885] 
['fresh', 5.750711529372451] 
['tick', 4.750711529372451] 

Ich habe versucht, das folgende zu tun, um die Datei zu einem Wörterbuch zu setzen und die Wörter und die Kerben zu trennen.

from collections import defaultdict 
d={} 
last_seen=set() 
with open("scored.txt","r") as filer: 

    for line in filer: 
      term, score= line.strip().split(",",1) 
      if line not in last_seen: 
        last_seen.add(line) 
+0

Wo ist Ihr Code? – Vader

+0

Enthält Ihre Datei tatsächlich die Klammern und Kommata? Bitte schreiben Sie auch den Code, den Sie ausprobiert haben. – mhawke

+0

Hinzugefügt. Ja, die Datei hat genau das oben gezeigte Format. – minks

Antwort

3

In Ihrer Textdatei gespeicherte Strings im Format von Python-Listen. Sie benötigen ast.literal_eval, um die Zeichenfolgendarstellung in eine Liste zu konvertieren. Und einfach dict, um Ergebnisse für Teams zu speichern. Versuchen Sie folgenden Code

import ast 
d={} 
with open("scored.txt","r") as filer: 
    for line in filer: 
      data = ast.literal_eval(line) 
      team,score = data[0],data[1] 
      if team not in d or d[team] < score: 
       d[team] = score 

UPDATE
nur Team-Komponente zu schreiben Datei könnten Sie

with open("ofile.txt","w") as f: 
    for team in d: 
     f.write(team) 

Dieser Code-Schnipsel schreibt alle Namen der Teams verwenden, um in zufälliger Reihenfolge einreichen. Um die Erstbestellung beizubehalten, sollten Sie OrderedDict von collections verwenden.

import ast 
from collections import OrderedDict 
d=OrderedDict() 
... 
# the same code 
+0

Wenn ich nur die Team-Komponenten in eine Ausgabedatei schreiben möchte, wie mache ich das? mit offen ("ofile.txt", "w") als t: für x in d [0]: drucken >> t, x – minks

+0

@minks Bitte, siehe Update – kvorobiev

+0

Ich scheine zu bemerken, dass die Bestellung nicht ist bewahrt werden. Die Sache ist, ich habe diesen Begriff eingestuft. Nach dem Entfernen der Duplikate ist die Reihenfolge zufällig. Ist es möglich, sie in der gleichen Reihenfolge wie zuvor zu halten, da ich sie nur in der Reihenfolge brauche? – minks

Verwandte Themen