sort list by frequency-value in python
本问题已经有最佳答案,请猛点这里访问。
我对python和编程还不熟悉,我不容易想到这些东西。因为我开始读的书完全没意思,我开始胡思乱想。
我想做的是:打开文本文件,计算每个值的频率(只是系统名列表),按频率对列表排序,然后返回结果。在搜索了一些代码之后,我在这里得到了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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])) |
它可以工作,但它按列表中的单词/系统名称排序:
1 2 3 4 | pc05010 3 pc05012 1 pc05013 8 pc05014 2 |
我想要这样:
1 2 3 4 | pc05013 8 pc05010 3 pc05014 2 pc05012 1 |
现在我搜索sort by value函数几个小时了。我打赌很容易,但我什么也没找到。
对于我的初学者来说,这与这一行有关:
1 | list = sorted(word_freq.keys()) |
我想可能是:
1 | list = sorted(word_freq.values()) |
但是没有…看到关于这门语言的大量信息,我感到非常沮丧,但却不能让这么简单的东西发挥作用。
请帮助:
谢谢!
使用collections.counter帮助计算内容,使用
1 2 3 4 5 6 7 8 | 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)) |
看看收藏品。柜台
1 2 3 4 5 | >>> wordlist = ['foo', 'bar', 'foo', 'baz'] >>> import collections >>> counter = collections.Counter(wordlist) >>> counter.most_common() [('foo', 2), ('baz', 1), ('bar', 1)] |
你必须在这里使用
1 2 3 | lis = sorted(word_freq.items(), key = lambda x:x[1], reverse = True) for word,freq in lis: print ("%-10s %d" % (word, freq)) |
不要将