计算/打印目录中的唯一单词,最多x个实例

时间:2016-10-17 00:48:29

标签: python sorting while-loop directory

我试图在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

谢谢社区,

2 个答案:

答案 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)一起使用,后者会更快。

但是,我想展示一下我是如何做到这一点的,完全避免代码中的sortedcollections.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))