除了对反向列表理解进行列表理解之外,是否有一种pythonic方法按值对计数器进行排序?如果是这样,它比这更快:
>>> from collections import Counter
>>> x = Counter({'a':5, 'b':3, 'c':7})
>>> sorted(x)
['a', 'b', 'c']
>>> sorted(x.items())
[('a', 5), ('b', 3), ('c', 7)]
>>> [(l,k) for k,l in sorted([(j,i) for i,j in x.items()])]
[('b', 3), ('a', 5), ('c', 7)]
>>> [(l,k) for k,l in sorted([(j,i) for i,j in x.items()], reverse=True)]
[('c', 7), ('a', 5), ('b', 3)
是:
>>> from collections import Counter
>>> x = Counter({'a':5, 'b':3, 'c':7})
使用排序的关键字键和 lambda 函数:
>>> sorted(x.items(), key=lambda i: i[1])
[('b', 3), ('a', 5), ('c', 7)]
>>> sorted(x.items(), key=lambda i: i[1], reverse=True)
[('c', 7), ('a', 5), ('b', 3)]
这适用于所有词典。然而,计数器
有一个特殊功能,它已经为您提供了排序项(从最频繁到最不频繁)。它被称为most_common()
:
>>> x.most_common()
[('c', 7), ('a', 5), ('b', 3)]
>>> list(reversed(x.most_common())) # in order of least to most
[('b', 3), ('a', 5), ('c', 7)]
您还可以指定想要查看的项目数量:
>>> x.most_common(2) # specify number you want
[('c', 7), ('a', 5)]
@MartijnPieters答案的一个相当不错的补充是取回按出现次数排序的字典,因为Collections.most_common
只返回元组。我经常将其与方便的日志文件的json输出相结合:
from collections import Counter, OrderedDict
x = Counter({'a':5, 'b':3, 'c':7})
y = OrderedDict(x.most_common())
输出:
OrderedDict([('c', 7), ('a', 5), ('b', 3)])
{
"c": 7,
"a": 5,
"b": 3
}
使用Counter.most_common()
方法,它将为您对项目进行排序:
>>> from collections import Counter
>>> x = Counter({'a':5, 'b':3, 'c':7})
>>> x.most_common()
[('c', 7), ('a', 5), ('b', 3)]
它将以最有效的方式做到这一点;如果您要求前 N 个而不是所有值,则使用堆而不是
直接排序:
>>> x.most_common(1)
[('c', 7)]
在计数器之外,排序始终可以根据<code>键<code>功能进行调整<代码>。sort()和<code>sorted()都是可调用的,允许您指定一个值对输入序列进行排序sorted(x,key=x.get,reverse=True)
将提供与x相同的排序。most_common()
,但只返回键,例如:
>>> sorted(x, key=x.get, reverse=True)
['c', 'a', 'b']
或者,您可以仅对给定的值(key, value)
对进行排序:
>>> sorted(x.items(), key=lambda pair: pair[1], reverse=True)
[('c', 7), ('a', 5), ('b', 3)]
有关更多信息,请参见Python排序方法。
我有一个pandas数据帧(df),我需要根据列值的计数对其进行排序。列的值是字符串。 例如,目标列的值为橙色、苹果色、香蕉色和桃色。单个计数(df['fruit'].value_counts())为: 香蕉2678 桃2250 橙色1765 苹果1691 结果我需要根据这些计数对初始数据帧(包括所有列等)进行排序。因此,在前2678行中,水果列中的值应为香蕉等
问题内容: 如何按“订单”键的值对该数组排序?即使这些值当前是连续的,也不会总是如此。 问题答案: 尝试使用usort,如果您仍然使用PHP5.2或更早版本,则必须首先定义一个排序函数: 从PHP 5.3开始,您可以使用匿名函数: 最后,在PHP 7中,您可以使用spaceship运算符: 要将其扩展到多维排序,如果第二个/第三个排序元素为零,请参考第二个/第三个排序元素-下文将详细说明。您也可以
考虑以下数组: 我如何对这个数组进行排序,其中最高值(5)是第一个,然后是2然后是最低值(1)是最后一个?我用了这个: 但我明白了: 它改变了键,但这是错误的。我希望得到这个: 我搜索发现:按数值排序一个数组,但这没有帮助。
我有一个班的学生有以下领域: 字段“状态”可以有2个值:1。现在,2。缺席的 然后我有一个可观察的列表: 因此,我将学生存储在这个列表中。每个学生都有出席或缺席状态。 我需要按状态对这个观察列表进行排序。我希望目前状态的学生在该列表中名列第一。 有什么建议吗? 如果有任何帮助,我将不胜感激。
问题内容: 考虑这种字典格式。 我希望字典首先按下载进行排序,然后对所有没有下载的项目按日期进行排序。显然,字典无法排序,我只需要列出可以迭代的键即可。 我已经可以使用来按任一值对列表进行排序,但是如何也按第二个值对列表进行排序? 问题答案: 将参数用于。它允许您指定一个函数,给定要排序的实际项目,该函数将返回一个应作为排序依据的值。如果此值为元组,则其排序方式类似于元组排序- 按第一个值,然后按
如何搜索前面有数字值的排序arraylist,计划是我要用最大到最小的数字对listview进行排序