0

我需要计算对象中某个数字的出现次数。不知道该怎么做。

我可以通过这种方式访问​​这些值:

>>> formset_sample.forms[0]._raw_value('type')
>>> '1'
>>> formset_sample.forms[1]._raw_value('type')
>>> '2'
>>> formset_sample.forms[2]._raw_value('type')
>>> '2'

这个对象有 len() = 3:

>>> len(formset_sample.forms)
>>> 3

如何获得数字 2 的出现次数?在这种情况下,数字“2”恰好出现两次。

一些线索?

此致,

4

5 回答 5

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"]
于 2013-02-06T16:53:50.027 回答
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排序、切片等。

于 2013-02-06T16:53:08.990 回答
2

这将生成一个字典,其中不同类型作为键,出现次数作为值:

import defaultdict
d = defaultdict(int)
for rv in formset_sample.forms:
  d[rv._raw_value_('type')] += 1
于 2013-02-06T16:55:25.813 回答
0
a = {1:1, 2:1, 3:2}
print a.values().count(1)
于 2013-02-06T16:57:35.823 回答
0
count = sum(f._raw_value('type') == '2' for f in formset_sample.forms)
于 2013-02-06T16:58:30.503 回答