Python - 如何统计对象中数字的出现次数?
我需要计算一个数字在一个对象中出现的次数。不太确定该怎么做。
我可以通过以下方式访问这些值:
>>> formset_sample.forms[0]._raw_value('type')
>>> '1'
>>> formset_sample.forms[1]._raw_value('type')
>>> '2'
>>> formset_sample.forms[2]._raw_value('type')
>>> '2'
这个对象的长度是3:
>>> len(formset_sample.forms)
>>> 3
我该如何获取数字2的出现次数呢?在这个例子中,数字'2'恰好出现了两次。
有没有什么提示呢?
祝好,
5 个回答
2
这段代码会生成一个字典,字典里用不同的类型作为键,出现的次数作为值。
import defaultdict
d = defaultdict(int)
for rv in formset_sample.forms:
d[rv._raw_value_('type')] += 1
4
我不太明白你想要达到什么效果。不过,也许可以用 map
函数来帮你:
values = map(lambda x: x._raw_value('type'), formset_sample.forms)
# alternate Syntax:
values = [form._raw_value('type') for form in formset_sample.forms]
print values
这应该会给你一个数组
['1', '2', '2']
你可以把这个数组放进一个 Counter
里:
from collections import Counter
print Counter(values)
应该是这样的
{ '1': 1, '2': 2 }
所以如果你想把这些都放在一行里:
Counter([form._raw_value('type') for form in formset_sample.forms])["2"]
3
这段代码会给你一个数字列表,并计算出里面有多少个2:
l = [ f._raw_value('type') for f in formset_sample.forms ]
l.count('2') # I am assuming 2 is a string, or
l.count(2) # if the number is stored as an integer
现在你可以用 l
来进行排序、切片等操作。