加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 按字母顺序排列具有相同计数的元素

发布时间:2020-12-20 13:17:17 所属栏目:Python 来源:网络整理
导读:Python Collection Counter.most_common(n)方法返回前n个元素及其计数.但是,如果两个元素的计数相同,我如何返回按字母顺序排序的结果? 例如:对于像:BBBAAACCD这样的字符串,对于“最常见的2个”元素,我希望结果是指定的n = 2: [('A',3),('B',('C',2)] 并
Python Collection Counter.most_common(n)方法返回前n个元素及其计数.但是,如果两个元素的计数相同,我如何返回按字母顺序排序的结果?

例如:对于像:BBBAAACCD这样的字符串,对于“最常见的2个”元素,我希望结果是指定的n = 2:

[('A',3),('B',('C',2)]

并不是:

[('B',('A',2)]

请注意,虽然A和B具有相同的频率,但A在结果列表中位于B之前,因为它按字母顺序出现在B之前.

[('A',2)]

我怎样才能做到这一点?

解决方法

这里有两个问题:

>在考虑排除重复的前n个最常见值时包括重复项.
>对于任何重复项,请按字母顺序排序.

迄今为止,所有解决方案都没有解决第一个问题.您可以将堆队列与itertools unique_everseen recipe(也可用于第三方库,如toolz.unique)一起计算第n个最大计数.

然后使用自定义键排序.

from collections import Counter
from heapq import nlargest
from toolz import unique

x = 'BBBAAACCD'

c = Counter(x)
n = 2
nth_largest = nlargest(n,unique(c.values()))[-1]

def sort_key(x):
    return -x[1],x[0]

gen = ((k,v) for k,v in c.items() if v >= nth_largest)
res = sorted(gen,key=sort_key)

[('A',2)]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读