按键对python中的计数器进行排序

Posted

技术标签:

【中文标题】按键对python中的计数器进行排序【英文标题】:sorting a counter in python by keys 【发布时间】:2013-07-29 15:25:59 【问题描述】:

我有一个看起来有点像这样的计数器:

Counter: ('A': 10), ('C':5), ('H':4)

我想按字母顺序对键进行排序,而不是按counter.most_common()

有什么办法可以做到吗?

【问题讨论】:

计数器基本上只是一个字典,所以这应该被认为是这个的副本:***.com/questions/9001509/… 您想按排序顺序打印它们吗? 【参考方案1】:

只需使用sorted:

>>> from collections import Counter
>>> counter = Counter('A': 10, 'C': 5, 'H': 7)
>>> counter.most_common()
[('A', 10), ('H', 7), ('C', 5)]
>>> sorted(counter.items())
[('A', 10), ('C', 5), ('H', 7)]

【讨论】:

我同意,知道 dict 上的迭代器产生键,而不是值,然后键将被排序。 注意,这会将 Counter 转换为列表 @crypdick,是的,确实如此,而且应该如此。因为在Python < 3.7 中,顺序字典键是不能保证的。 mail.python.org/pipermail/python-dev/2017-December/151283.html , docs.python.org/3/whatsnew/3.7.html【参考方案2】:
>>> from operator import itemgetter
>>> from collections import Counter
>>> c = Counter('A': 10, 'C':5, 'H':4)
>>> sorted(c.items(), key=itemgetter(0))
[('A', 10), ('C', 5), ('H', 4)]

【讨论】:

这行得通,但是,itemgetter 对于对元组列表或列表列表进行排序很有用,但在 dict 上它是无用的, sorted(c) 相当于 sorted(c.keys() )【参考方案3】:

在 Python 3 中,可以使用 collections.Counter 的most_common 函数:

x = ['a', 'b', 'c', 'c', 'c', 'd', 'd']
counts = collections.Counter(x)
counts.most_common(len(counts))

这使用了 collections.Counter 中可用的 most_common 函数,它允许您查找 n 最常用键的键和计数。

【讨论】:

这根本不能回答问题。我得到[('c', 3), ('d', 2), ('a', 1), ('b', 1)],它没有按字母顺序对键进行排序。 OP显然知道most_common,问题中提到了。【参考方案4】:

按排序顺序获取值作为列表

array              = [1, 2, 3, 4, 5]
counter            = collections.Counter(array)
sorted_occurrences = list(dict(sorted(counter.items())).values())

【讨论】:

【参考方案5】:
sorted(counter.items(),key = lambda i: i[0])

例如:

arr = [2,3,1,3,2,4,6,7,9,2,19]
c = collections.Counter(arr)
sorted(c.items(),key = lambda i: i[0])

外层: [(1, 1), (2, 3), (3, 2), (4, 1), (6, 1), (7, 1), (9, 1), (19, 1)] 如果要获取字典格式,只需

dict(sorted(c.items(),key = lambda i: i[0]))

【讨论】:

以上是关于按键对python中的计数器进行排序的主要内容,如果未能解决你的问题,请参考以下文章

python 按值计数对字典进行排序

计数排序,桶排序,基数排序的python实现

对db中的值进行排序和计数[重复]

使用计数值对数组进行排序

Spark - 按键分组,然后按值计数

使用 pandas 在数据帧上执行 groupby,按计数排序并获取 python 中的前 2 个计数