我是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())
但没有.... 看到关于这种语言的所有大量信息让我感到非常沮丧,但却无法让这些简单的事情发挥作用。
请帮助:)
非常感谢!
答案 0 :(得分:4)
看看collections.Counter
>>> wordlist = ['foo', 'bar', 'foo', 'baz']
>>> import collections
>>> counter = collections.Counter(wordlist)
>>> counter.most_common()
[('foo', 2), ('baz', 1), ('bar', 1)]
答案 1 :(得分:4)
使用collections.Counter来帮助计算内容,使用with
statement来帮助打开(和关闭)文件。
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))
答案 2 :(得分:2)
您在这里使用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
用作变量名称。