我正在运行以下代码来计算文本文件中出现的单词的次数。
def print_words(filename):
f = open(filename, 'rU')
dict={}
for line in f:
words=line.split()
for word in words:
if dict.get(word):
dict[word]=dict[word]+1
else:
dict[word]=1
ke = sorted(dict.keys())
for k, v in ke: print k, v
字典文件应该包含每个单词及其计数。我能够正常工作。但我没有对
进行排序答案 0 :(得分:2)
其他答案指出了问题所在。如果您正在使用python 2.7+,那么使用collections
模块中的Counter
类可以更轻松地完成此操作。
from collections import Counter
def print_words(filename):
with open(filename, 'rU') as f:
counts = Counter(f.read().split())
for k, v in sorted(counts.items()):
print k, v
答案 1 :(得分:1)
而不是
ke = sorted(dict.keys())
for k, v in ke: print k, v
尝试:
for k in sorted(dict.keys()):
print k, dict[k]
sorted(dict.keys())
将返回仅列出键的排序列表(因为这就是你所提供的所有键)。
答案 2 :(得分:1)
sorted(dict.keys())
返回仅按键的排序列表。您的for循环错误地期望在同一列表中找到值。请尝试以下代码:
for k in ke:
print k, dict[k]
答案 3 :(得分:1)
对于2.5和2.6兼容的解决方案,请使用defaultdict
:
from collections import defaultdict
counter = defaultdict(int)
for word in f.read().split():
counter[word] += 1
这会返回一个字典(实际上是一个子类,但是以相同的方式使用),您可以在其中查找counter['someword']
(返回一个整数)。
工作原理:如果请求的密钥不存在,则使用给定函数的返回值创建。在这种情况下,int()
,即0
。另请参阅上面链接的文档中的示例部分。
答案 4 :(得分:0)
根据更重要的内容 - 订购或统计 - 您可以使用ordered dictionary
中的counter dictionary或collections moduleOrderedDict按照添加顺序记住元素;反计数元素
对于前者,你可以做类似的事情
>>> words = open(filename).read().split()
>>> counters = OrderedDict([(word, words.count(word))
for word in sorted(list(set(words)))])
您将获得带有计数器的排序字典 - 只需2行。