在一组中按频率而不是字母顺序排序(在 Python 中)
Ordering by frequency rather than alphabetically in a set (in Python)
我正在查看 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'}
是否可以根据频率计数来订购套装?
集合是唯一元素的无序集合,因此对它们进行排序没有任何意义。
您可能想要一个列表,是排序的。下面使用 list comprehension 构造键列表。
我们可以迭代 Counter.most_common()
其中 returns 一系列 (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']
我正在查看 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'}
是否可以根据频率计数来订购套装?
集合是唯一元素的无序集合,因此对它们进行排序没有任何意义。
您可能想要一个列表,是排序的。下面使用 list comprehension 构造键列表。
我们可以迭代 Counter.most_common()
其中 returns 一系列 (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']