2013-02-06 59 views
0

我需要計算一個對象中數字的出現次數。不知道該怎麼做。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' 

該目的LEN()= 3:

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

如何獲得數字2的發生?數字'2'在這種情況下恰好有兩個出現。

一些線索?

最好的問候,

+0

沒有數字2.有一個字符串'2'(它包含一個數字)。 – Matthias

+0

注意:通常,前導'_'意味着該屬性是私有的,並且不應該在對象類(或其子類)之外使用。 – jfs

回答

3

這應該給你號的列表和計數2秒的數量:您可以使用l排序

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 

現在,切片等

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"] 
+1

'Counter(form._raw_value('type')for formset_sample.forms)['2']'應該也可以。 – DSM

+1

+1用於'Counter'。 – gauden

2

這將產生一個字典,不同類型的鍵和值出現次數的數量:

import defaultdict 
d = defaultdict(int) 
for rv in formset_sample.forms: 
    d[rv._raw_value_('type')] += 1 
0
a = {1:1, 2:1, 3:2} 
print a.values().count(1) 
0
count = sum(f._raw_value('type') == '2' for f in formset_sample.forms) 
相關問題