【发布时间】:2011-10-25 11:47:05
【问题描述】:
在 Python 3.2 / Windows 环境中处理单词出现计数应用程序。
谁能帮忙告诉我为什么以下不起作用?
from string import punctuation
from operator import itemgetter
N = 100
words = {}
words_gen = (word.strip(punctuation).lower() for line in open("poi_run.txt")
for word in line.split())
for word in words_gen:
words[word] = words.get(word, 0) + 1
top_words = (words.iteritems(), key=itemgetter(1), reverse=True)[:N]
for word, frequency in top_words:
print ("%s %d") % (word, frequency)
回溯错误是:
Message File Name Line Position
Traceback
<module> C:\Users\will\Desktop\word_count.py 13
AttributeError: 'dict' object has no attribute 'iteritems'
谢谢
n.b.
完整的工作代码:
from string import punctuation
from operator import itemgetter
N = 100
words = {}
words_gen = (word.strip(punctuation).lower() for line in open("poi_run.txt")
for word in line.split())
for word in words_gen:
words[word] = words.get(word, 0) + 1
top_words = sorted(words.items(), key=itemgetter(1), reverse=True)[:N]
for word, frequency in top_words:
print ("%s %d" % (word, frequency))
再次感谢大家
【问题讨论】:
-
top_words = (words.iteritems(), key=itemgetter(1), reverse=True)[:N]- 你是不是漏掉了一些函数名? -
您可能想使用
defaultdict:words = defaultdict(int); for words in word_gen: words[word] += 1。 -
@TimPietzcker:实际上,来自同一模块的
Counter在这里更好。完美,甚至。为什么我之前没有想到呢?谢谢你的想法。 -
@PetrViktorin:当然。我总是忘记
Counter。好多了。但似乎我们已经把他输给了 Perl(颤抖)。好吧,他的损失比我们的多:)
标签: python python-3.x