猿问

在python中按频率值排序列表

我是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]))

它可以工作,但是按列表中的单词/ systemnames排序:


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())

但是不。。我很沮丧地看到有关该语言的所有信息,但无法使这些简单的事情起作用。


婷婷同学_
浏览 235回答 3
3回答

尚方宝剑之说

您必须在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用作变量名。

慕运维8079593

使用collections.Counter有助于对事物进行计数,并使用withstatement来帮助打开(和关闭)文件。import collectionswith 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))

饮歌长啸

看一下集合。>>> wordlist = ['foo', 'bar', 'foo', 'baz']>>> import collections>>> counter = collections.Counter(wordlist)>>> counter.most_common()[('foo', 2), ('baz', 1), ('bar', 1)]
随时随地看视频慕课网APP

相关分类

Python
我要回答