python中按频率值对列表排序
我是python和编程新手,要想记住这些东西并不容易。 因为我开始读的书都很无聊,所以我开始玩弄一些想法 以下是我想做的: 打开文本文件,计算每个值的频率(只是一个系统名列表),按频率对列表进行排序,然后返回结果。 在网上搜索了一些代码后,我在这里得到了以下信息:python中按频率值对列表排序,python,sorting,count,Python,Sorting,Count,我是python和编程新手,要想记住这些东西并不容易。 因为我开始读的书都很无聊,所以我开始玩弄一些想法 以下是我想做的: 打开文本文件,计算每个值的频率(只是一个系统名列表),按频率对列表进行排序,然后返回结果。 在网上搜索了一些代码后,我在这里得到了以下信息: file = open('C:\\Temp\\Test2.txt', 'r') text = file.read() file.close() word_list = text.lower().split(None) word_
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())
但是没有。。。。
看到关于这门语言的大量信息,但却无法让如此简单的事情运作起来,我感到非常沮丧
请帮忙:)
非常感谢 您必须在此处使用
word\u 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
作为变量名。查看集合。计数器
>>> wordlist = ['foo', 'bar', 'foo', 'baz']
>>> import collections
>>> counter = collections.Counter(wordlist)
>>> counter.most_common()
[('foo', 2), ('baz', 1), ('bar', 1)]
使用a帮助计算物品,并帮助打开(和关闭)文件
您不应该使用
list
作为变量名,因为它是内置的list()
函数的名称。这样做是必要的。好的,谢谢你的建议:)@BurhanKhalid:谢谢你的编辑。没问题-你的答案和我的答案一样,所以我只是添加了文档链接。哇,非常感谢。现在,我将尝试通过您添加的链接来理解集合:)
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))