使用Counter选择Python列表中的所有顶级单词

时间:2013-12-08 14:40:29

标签: python list counter

我相信这应该是非常简单的,但似乎我无法直接思考这一点。

我有一个如下列表:

comp = [Amazon, Apple, Microsoft, Google, Amazon, Ebay, Apple, Paypal, Google]

我只想打印最常出现的单词。我做了以下事情:

cnt = Counter(comp.split(','))
final_list = cnt.most_common(2)

这给了我以下输出:

[[('Amazon', 2), ('Apple', 2)]]

我不确定most_common()中传递了什么参数,因为每个输入列表可能有所不同。所以,我想知道如何打印最常出现的单词,一个列表为3,另一个列表为4。因此,对于上面的示例,输出如下:

[[('Amazon', 2), ('Apple', 2), ('Google',2)]]

由于

3 个答案:

答案 0 :(得分:3)

您可以通过维护两个变量maximaxi_value来存储最大元素而不是它发生的次数。

dict = {}
maxi = None
maxi_value = 0
for elem in comp:
    try:
        dict[elem] += 1
    except IndexError:
        dict[elem] = 1
    if dict[elem] > mini_value:
        mini = elem
print (maxi)

答案 1 :(得分:3)

您可以在此处使用itertools.takewhile

>>> from itertools import takewhile
>>> lis = ['Amazon', 'Apple', 'Microsoft', 'Google', 'Amazon', 'Ebay', 'Apple', 'Paypal', 'Google']
>>> c = Counter(lis)
>>> items = c.most_common()

获取最大数量:

>>> max_ = items[0][1]

仅选择count = max_的项目,并在找到计数较少的项目后立即停止:

>>> list(takewhile(lambda x: x[1]==max_,  items))
[('Google', 2), ('Apple', 2), ('Amazon', 2)]

你误解了Counter.most_common

most_common(self, n=None)
  

列出n最常见的元素及其最常见的计数   至少。如果n为None,则列出所有元素计数。

n不是此处的计数,它是您要返回的热门项目数。它基本上等同于:

>>> c.most_common(4)
[('Google', 2), ('Apple', 2), ('Amazon', 2), ('Paypal', 1)]
>>> c.most_common()[:4]
[('Google', 2), ('Apple', 2), ('Amazon', 2), ('Paypal', 1)]

答案 2 :(得分:1)

查找其中一个热门字词的出现次数,然后过滤most_common返回的整个列表:

>>> mc = cnt.most_common()
>>> filter(lambda t: t[1] == mc[0][1], mc)