【问题标题】:Different method for creating unique output创建独特输出的不同方法
【发布时间】:2017-04-28 21:05:53
【问题描述】:

问题: 使用 infile 和 outfile 我正在尝试为 infile 中的每一行写入 outfile 唯一单词和频率。例如,给定“一条鱼两条鱼”,输出将是一:1 二:1 鱼:2(顺序无关紧要。)我能够成功地做到这一点,但是使用了我没有教过的东西班级。即set函数,自动取列表中的唯一词。

我的问题: 有没有其他方法可以在不使问题过于复杂的情况下实现相同的输出?我想也许可以将单词附加到列表中,但我无法让它工作。感谢您提供任何和所有帮助!

我使用 set 函数的工作代码。

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

文件内:

一条鱼两条鱼

红鱼蓝鱼

输出文件:

鱼:2 一:1 二:1

鱼:2 红色:1 蓝色:1

【问题讨论】:

    标签: python function file file-io


    【解决方案1】:

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

    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']
    

    您可以将此输出写入文件

    【讨论】:

      【解决方案2】:

      获取单词及其频率的字典

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-18
        • 2011-07-04
        • 2012-10-20
        • 1970-01-01
        • 1970-01-01
        • 2020-05-30
        • 2021-07-29
        • 1970-01-01
        相关资源
        最近更新 更多