为了账号安全,请及时绑定邮箱和手机立即绑定

在python中按频率值排序列表

在python中按频率值排序列表

婷婷同学_ 2021-03-18 11:11:38
我是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) + 1list = sorted(word_freq.keys())for word in list:    print ("%-10s %d" % (word, word_freq[word]))它可以工作,但是按列表中的单词/ systemnames排序:pc05010    3pc05012    1pc05013    8pc05014    2我想要这样:pc05013    8pc05010    3pc05014    2pc05012    1现在,我正在搜索按值排序功能数小时。我敢打赌,它很简单,但我什么也没发现。对于我的初学者而言,这与以下代码有关:list = sorted(word_freq.keys())我想也许是这样的:list = sorted(word_freq.values())但是不。。我很沮丧地看到有关该语言的所有信息,但无法使这些简单的事情起作用。
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超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用作变量名。


查看完整回答
反对 回复 2021-03-26
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

使用collections.Counter有助于对事物进行计数,并使用withstatement来帮助打开(和关闭)文件。


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


查看完整回答
反对 回复 2021-03-26
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

看一下集合。


>>> wordlist = ['foo', 'bar', 'foo', 'baz']

>>> import collections

>>> counter = collections.Counter(wordlist)

>>> counter.most_common()

[('foo', 2), ('baz', 1), ('bar', 1)]


查看完整回答
反对 回复 2021-03-26
  • 3 回答
  • 0 关注
  • 226 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信