按频率排序而不是按字母顺序排列(在Python中)

时间:2015-03-18 09:08:07

标签: python python-3.x set counter

我正在查看Python库中的一个示例,其中列表中单词出现的总数按字典中的频率计数排序:

cnt = Counter()
for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
    cnt[word] += 1

cnt的输出,其中元素按其频率计数顺序列出:

Counter({'blue': 3, 'red': 2, 'green': 1})

我想制作一个数字频率不包括在内的集合,但保留了列出元素的顺序:

{'blue', 'red', 'green'}

然而,在我尝试实现这一目标时:

set(word for word, count in cnt.most_common(3))

我接受一个集合,其中元素按字母顺序排序而不是频率计数:

{'blue', 'green', 'red'}

是否可以根据频率计数订购套件?

1 个答案:

答案 0 :(得分:5)

集合是唯一元素的无序集合,因此对它们进行排序没有任何意义。

您可能需要一个列表, 已订购。以下使用list comprehension来构造键列表。

我们可以遍历Counter.most_common(),它会按顺序返回(key, value)元组的序列。

from collections import Counter

c = Counter({'blue': 3, 'red': 2, 'green': 1})

keys = [key for key, val in c.most_common()]

print(keys)
# ['blue', 'red', 'green']