我在python中创建了一个简单的字数统计程序,它读取文本文件,计算字频率并将结果写入另一个文件。问题是当单词重复出现时,程序会写入同一个单词的初始计数和最终计数。例如,如果重复单词“hello”3次,程序会在输出中写入3个hello实例:
单词 - 频率计数
你好 - 1
你好 - 2
你好 - 3
代码是:
counts ={}
for w in words:
counts[w] = counts.get(w,0) + 1
outfile.write(w+','+str(counts[w])+'\n')'
任何帮助将不胜感激。我是python中的新手。
答案 0 :(得分:5)
解决此问题的实际方法是使用Counter
,如下所示:
>>> from collections import Counter
>>> words = ['b','b','the','the','the','c']
>>> Counter(words).most_common()
[('the', 3), ('b', 2), ('c', 1)]
解决问题的另一种方法是使用defaultdict
,它就像上面的Counter
示例一样:
>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> for word in words:
... d[word] += 1
...
>>> d
defaultdict(<type 'int'>, {'the': 3, 'b': 2, 'c': 1})
无论你如何计算单词,只有在计算完所有单词后才能写入文件;否则你为每个“计数”写了一次,一旦这个词出现不止一次,你的输出就会翻倍。
所以,首先收集计数,然后把它们写出来。
答案 1 :(得分:1)
使代码有效的方法:
counts ={}
for w in words:
counts[w] = counts.get(w,0) + 1
for w in counts:
outfile.write(w+','+str(counts[w])+'\n')
但我认为Burhan Khalid建议使用Counter是解决问题的更好方法。
答案 2 :(得分:0)
您是否考虑过首先在您的程序中存储频率计数,然后在结束时全部写入?它肯定比为每个计数重写输出文件更简单。