可能重复:
How to calculate the occurrences of a list item in Python?
我正在进行一项民意调查。为此,我使用的是Python,而我所坚持的部分是试图弄清楚如何计算某个东西,例如“General Store”出现的次数。
E.g。民意调查:
你最看哪个广告?
General Store
超市
购物中心
小商店
如果需要该信息,则通过单选按钮提交轮询数据。所有这些答案都会附加到一个列表中,然后我想创建一个结果页面,显示每个项目被投票的次数。
答案 0 :(得分:6)
这有效:
>>> from collections import Counter
>>> data = ['Store', 'Office', 'Store', 'Office', 'Home', 'Nowhere']
>>> Counter(data)
Counter({'Office': 2, 'Store': 2, 'Home': 1, 'Nowhere': 1})
答案 1 :(得分:3)
首先,我要说你可能会使用错误的sollution来解决投票结果问题。为什么不为每个选项保留一个计数器,这样,您的文件或用于存储此数据的任何后端都不会随着响应的增加而线性增长。
更简单的原因是因为你无论如何都要创建计数器,唯一的区别是每次加载响应页面时你都必须计算所有项目。
#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
现在,结果将列表中出现的每个字符串作为键,以及它出现的次数。
答案 2 :(得分:2)
您需要使用collections.Counter
和.most_common
方法。
答案 3 :(得分:1)
如果你有一个清单,你可以
ls = ["Mall", "Mall", "Supermarket"]
ls.count("Mall")
>>> 2
ls.count("General Store")
>>> 0
答案 4 :(得分:1)
对于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}