8

我是 python 和编程的新手,对我来说要记住这些东西并不容易。因为我开始读的书很无聊,所以我开始尝试一些想法。

这就是我想要做的:打开文本文件,计算每个值的频率(只是系统名称的列表),按频率对列表进行排序,然后返回结果。在网上搜索一些代码后,我在这里得到了这个:

file = open('C:\\Temp\\Test2.txt', 'r')
text = file.read()
file.close()


word_list = text.lower().split(None)

word_freq = {}

for word in word_list:

    word_freq[word] = word_freq.get(word, 0) + 1
list = sorted(word_freq.keys())
for word in list:
    print ("%-10s %d" % (word, word_freq[word]))

它有效,但它按列表中的单词/系统名称排序:

pc05010    3
pc05012    1
pc05013    8
pc05014    2

我想要这样:

pc05013    8
pc05010    3
pc05014    2
pc05012    1

现在我正在搜索几个小时的按值排序函数。我敢打赌它很容易,但我什么也没找到。

对于我初学者的观点,它与这条线有关:

list = sorted(word_freq.keys())

我想也许它的:

list = sorted(word_freq.values())

但是没有....看到关于这种语言的所有信息,但无法让如此简单的事情发挥作用,我感到非常沮丧。

请帮忙 :)

多谢!

4

3 回答 3

4

你必须在word_freq.items()这里使用:

lis = sorted(word_freq.items(), key = lambda x:x[1], reverse = True)
for word,freq in lis:
    print ("%-10s %d" % (word, freq))

不要list用作变量名。

于 2013-05-25T12:39:41.567 回答
4

看看 collections.Counter

>>> wordlist = ['foo', 'bar', 'foo', 'baz']
>>> import collections
>>> counter = collections.Counter(wordlist)
>>> counter.most_common()
[('foo', 2), ('baz', 1), ('bar', 1)]
于 2013-05-25T12:40:08.090 回答
4

使用collections.Counter来帮助计算事物,并使用with语句来帮助打开(和关闭)文件。

import collections

with open('C:\\Temp\\Test2.txt', 'r') as f:
    text = f.read()

word_freq = collections.Counter(text.lower().split())
for word, freq in word_freq.most_common():
    print ("%-10s %d" % (word, freq))
于 2013-05-25T12:41:42.030 回答