我试图在tale4653中获取所有独特的单词,计算他们的实例,然后读出前100个提到的独特单词。
我的目标是对目录进行排序,以便我可以打印唯一的单词及其“受尊重的实例”。
import string
fhand = open('tale4653.txt')
counts = dict()
for line in fhand:
line = line.translate(None, string.punctuation)
line = line.lower()
words = line.split()
for word in words:
if word not in counts:
counts[word] = 1
else:
counts[word] += 1
fhand.close()
rangedValue = sorted(counts.values(), reverse=True)
i =0
while i<100:
print rangedValue[i]
i=i+1
谢谢社区,
答案 0 :(得分:0)
当你counts.values()
)
你可以这样做
rangedValue = sorted(counts.items(), reverse=True, key=lambda x: x[1])
for word, count in rangedValue:
print word + ': ' + str(rangedValue)
当你执行counts.items()时,它将返回一个键和值的元组列表,如下所示:
[('the', 1), ('end', 2)]
当我们对它进行排序时,我们告诉它将第二个值作为“键”以
排序答案 1 :(得分:0)
DorElias在最初的问题中是正确的:您需要将count.items()
与key=lambda x: x[1]
或key=operator.itemgetter(1)
一起使用,后者会更快。
但是,我想展示一下我是如何做到这一点的,完全避免代码中的sorted
。 collections.Counter
是此代码的最佳数据结构。我也更喜欢在文件中读取文字的逻辑包装在生成器中
import string
from collections import Counter
def read_words(filename):
with open(filename) as fhand:
for line in fhand:
line = line.translate(None, string.punctuation)
line = line.lower()
words = line.split()
for word in words: # in Python 3 one can use `yield from words`
yield word
counts = Counter(read_words('tale4653.txt'))
for word, count in counts.most_common(100):
print('{}: {}'.format(word, count))