如何从文本文件中删除带有分数的重复术语?

时间:2016-03-19 10:24:51

标签: python

我有一个文件,下面是它的样子片段。我有这些单词和相关的分数。如何删除分数较低的重复项。我的意思是' fresh'有两个分数(7.781和5.750),我试图删除' fresh'和其他较低分数的重复术语。有可能吗?

['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)

1 个答案:

答案 0 :(得分: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