1

可能重复:
如何计算 Python 中列表项的出现次数?

我正在进行一项民意调查。为此,我正在使用 Python,而我坚持的部分是试图弄清楚如何计算某件事的次数,比如“General Store”出现。

例如民意调查:

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

  1. 杂货店

  2. 超级市场

  3. 购物中心

  4. 小商店

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

4

5 回答 5

7

这有效:

>>> from collections import Counter
>>> data = ['Store', 'Office', 'Store', 'Office', 'Home', 'Nowhere']
>>> Counter(data)
Counter({'Office': 2, 'Store': 2, 'Home': 1, 'Nowhere': 1})
于 2012-08-02T23:07:34.990 回答
3

首先,我要说您可能为您的投票结果问题使用了错误的解决方案。为什么不为每个选项保留一个计数器,这样,您的文件或您用来存储此数据的任何后端都不会随着响应的到来而线性增长。

这样做会更容易的原因是因为无论如何您都将创建计数器,唯一的区别是每次加载响应页面时您都必须计算所有项目。

#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

现在,结果会将列表中出现的每个字符串作为键,并将它出现的次数作为它的值。

于 2012-08-02T23:07:38.840 回答
2

你会想要使用collections.Counter

.most_common方法。

于 2012-08-02T22:57:42.853 回答
2

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

>>> 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 上,你可以这样做:

>>> s = set(l)
>>> d = {}
>>> for i in s:
...    d[i] = l.count(i)
... 
>>> d
{'there': 1, 'bar': 1, 'hello': 3, 'foo': 2}
于 2012-08-02T23:08:19.727 回答
1

如果你有一个列表,你可以做

ls = ["Mall", "Mall", "Supermarket"]
ls.count("Mall")
>>> 2
ls.count("General Store")
>>> 0
于 2012-08-02T22:59:44.573 回答