繁体   English   中英

Python:如何获取列表中项目的排序数量?

[英]Python: how to get sorted count of items in a list?

在Python中,我有一个项目列表,如:

mylist = [a, a, a, a, b, b, b, d, d, d, c, c, e]

我想输出如下内容:

a (4)
b (3)
d (3)
c (2)
e (1)

如何输出列表中项目的计数和排行榜? 我不太关心效率,只是任何方式工作:)

谢谢!

from collections import defaultdict

def leaders(xs, top=10):
    counts = defaultdict(int)
    for x in xs:
        counts[x] += 1
    return sorted(counts.items(), reverse=True, key=lambda tup: tup[1])[:top]

因此,此函数使用defaultdict来计算列表中每个条目的数量。 然后我们取每对条目及其计数,并根据计数按降序排序。 然后,我们把top的条目数并返回。

所以现在我们可以说

>>> xs = list("jkl;fpfmklmcvuioqwerklmwqpmksdvjioh0-45mkofwk903rmiok0fmdfjsd")
>>> print leaders(xs)
[('k', 7), ('m', 7), ('f', 5), ('o', 4), ('0', 3), ('d', 3), ('i', 3), ('j', 3), ('l', 3), ('w', 3)]

双线:

for count, elem in sorted(((mylist.count(e), e) for e in set(mylist)), reverse=True):
    print '%s (%d)' % (elem, count)

我很惊讶没有人提到过collections.Counter 。对不起。 假设

import collections
mylist = ['a', 'a', 'a', 'a', 'b', 'b', 'b', 'd', 'd', 'd', 'c', 'c', 'e']

它只是一个班轮:

print(collections.Counter(mylist).most_common())

将打印:

[('a', 4), ('b', 3), ('d', 3), ('c', 2), ('e', 1)]

请注意, Counterdict的子类,带有一些用于计算对象的有用方法。 有关详细信息,请参阅文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM