创建唯一输出的不同方法

时间:2017-04-28 21:05:54

标签: python function file file-io

问题: 使用infile和outfile我试图写出infile中每行的outfile唯一单词和频率。举个例子,给出一条鱼两条鱼和一条鱼。输出将是一:1两:1鱼:2(顺序并不重要。)我能够成功地做到这一点,但使用的是我班上没有教过的东西。哪个是set函数,它会自动获取列表中的唯一单词。

我的问题: 有没有其他方法可以实现相同的输出而不会使问题过于复杂?我想可能会在列表中添加单词,但我无法使其工作。任何和所有的帮助表示赞赏!

我的工作代码使用set function。

def wordsByLine(inFile,outFile):
    inF=open(inFile,'r')
    outF=open(outFile,'w')
    for line in inF:
        wordlst=line.split()
        uniquewordlst=set(wordlst)
        for word in uniquewordlst:
            outF.write(word+':'+str(line.count(word))+' ')
        outF.write('\n')
    outF.close()
    inF.close()
wordsByLine('fish.txt','fishWords.txt')

INFILE:

  一条鱼两条鱼

     红鱼蓝鱼

OutFile将:

  鱼:2:1:1 2:1

     鱼:2红色:1蓝色:1

2 个答案:

答案 0 :(得分:0)

你可以使用如下所示的计数器。我使用列表而不是文件,但它应该适用于文件中的每一行

a = ['one fish two fish','red fish blue fish']
from collections import Counter
for i in a:
    print ["{0}:{1}".format(i,j) for i,j in  Counter(i.split()).most_common()]

结果

['fish:2', 'two:1', 'one:1']
['fish:2', 'blue:1', 'red:1']

您可以将此输出写入文件

答案 1 :(得分:0)

获取单词及其频率的字典

aa = 'one fish two fish'
bb = aa.split(' ')
cc = {x:bb.count(x) for x in bb}

>>> cc
{'fish': 2, 'two': 1, 'one': 1}