2016-03-19 3 views
0

У меня есть файл, а ниже - фрагмент того, как он выглядит. У меня есть эти слова со связанным счетом. Как удалить дубликаты, которые имеют более низкий балл. Я имею в виду, что «свежий» имеет два счета (7.781 и 5.750), я пытаюсь удалить «свежие» и другие повторяющиеся термины с более низким счетом. Это возможно?Как удалить повторяющиеся термины с результатами из текстового файла?

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

Я попытался сделать следующее, чтобы поместить файл в словарь и отделить слова и оценки.

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

Где именно ваш код? – Vader

+0

В вашем файле есть скобки и запятые? Кроме того, отправьте код, который вы попробовали. – mhawke

+0

Добавлено. Да, файл находится в том же формате, что и выше. – minks

ответ

3

В текстовом файле хранятся строки в формате списков python. Вам нужно ast.literal_eval, чтобы преобразовать представление строки в список. И просто dict для хранения баллов для команд. Попробуйте следующий код

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
Чтобы написать только компонент команды в файл, который вы могли бы использовать

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

Этот фрагмент кода будет писать имена всех команд в файл в произвольном порядке. Чтобы сохранить первоначальный заказ, вы должны использовать OrderedDict от collections.

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

Если я хочу написать только компоненты команды в выходной файл, как мне это сделать? с открытым («ofile.txt», «w») как t: для x in d [0]: print >> t, x – minks

+0

@minks Пожалуйста, см. Обновление – kvorobiev

+0

Я, кажется, заметил, что заказ не является сохраняются. Дело в том, что я оценил этот термин. При удалении дубликатов порядок случайный. Возможно ли сохранить их в том же порядке, что и раньше, поскольку они мне нужны только в ранжированном порядке? – minks

Смежные вопросы