关于python:如何查找项目出现的次数

List - How to find number of times an item appears

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How to calculate the occurrences of a list item in Python?

我正在做一种民意测验。为此,我使用的是python,而我所关注的部分是如何计算某个特定事物出现的次数,比如说,"general store"。

例如民意测验:

你在哪里看到的广告最多?

  • Store将军

  • 超市

  • 购物中心

  • 小商店

  • 如果需要,可以通过单选按钮提交投票数据。所有这些答案都将被附加到一个列表中,然后我想创建一个结果页面,显示每件事被投票多少次。


    这工作:

    1
    2
    3
    4
    >>> from collections import Counter
    >>> data = ['Store', 'Office', 'Store', 'Office', 'Home', 'Nowhere']
    >>> Counter(data)
    Counter({'Office': 2, 'Store': 2, 'Home': 1, 'Nowhere': 1})

    首先,我要说的是,你可能对你的民意测验结果问题使用了错误的解决方法。为什么不为每个选项保留一个计数器,这样,您的文件,或者您用来存储此数据的任何后端不会随着响应的出现而线性增长。

    更简单的原因是,您无论如何都要创建计数器,这里唯一的区别是,每次加载响应页面时,您都必须计算所有项目。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #initializing a variable with some mock poll data
    option1 ="general store"
    option2 ="supermarket"
    option3 ="mall"
    option4 ="small store"

    sample_data = [option1,option2,option1,option1,option3,option3,option4,option4,option4,option2]

    #a dict that will store the poll results
    results = {}

    for response in sample_data:
        results[response] = results.setdefault(response, 0) + 1

    现在,结果将把列表中出现的每个字符串都作为一个键,以及它作为值出现的次数。


    你要用collections.Counter

    .most_common方法。


    对于python 2.7+,可以使用collections.Counter

    1
    2
    3
    4
    >>> from collections import Counter
    >>> l = ['hello','hello','hello','there','foo','foo','bar']
    >>> Counter(l).most_common()
    [('hello', 3), ('foo', 2), ('there', 1), ('bar', 1)]

    如果您不在2.7上,您可以改为这样做:

    1
    2
    3
    4
    5
    6
    7
    >>> s = set(l)
    >>> d = {}
    >>> for i in s:
    ...    d[i] = l.count(i)
    ...
    >>> d
    {'there': 1, 'bar': 1, 'hello': 3, 'foo': 2}


    如果你有清单,你可以

    1
    2
    3
    4
    5
    ls = ["Mall","Mall","Supermarket"]
    ls.count("Mall")
    >>> 2
    ls.count("General Store")
    >>> 0