关于排序:在python中按频率值排序列表

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帮助计算内容,使用with语句帮助打开(和关闭)文件。

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


你必须在这里使用word_freq.items()

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

不要将list用作变量名。