2013-04-08 70 views
1

我有以下Python字典Python字典,計數元素值

resultDict: 
{'1234':{'alertStatus': 'open', 'reasonDescription': None}, 
'4321': {'alertStatus': 'closed', 'reasonDescription': 'Public'}, 
'6789': {'alertStatus': 'open', 'reasonDescription': 'None'}} 

我想算的開放數量和關閉警報(實際我有5個不同的狀態,但在本例中,我減少它到2)

我寫了下面的代碼,但它看起來很不整潔。我想知道是否有更好的方式來做到這一點

result = {} 
result['length'] = len(resultDict) 
lenOpen = 0 
lenClosed = 0 

for notifications in resultDict.values(): 
    if notifications['alertStatus'] == 'open': 
     lenOpen = lenOpen + 1 
    if notifications['alertStatus'] == 'closed': 
     lenClosed = lenClosed + 1 

statusCount = [] 
if lenOpen > 0: 
    statusCount.append(str(lenOpen) + ' ' + 'open') 
if lenOpenUnderInvestigation > 0: 
    statusCount.append(str(lenClosed) + ' ' +'closed') 

result['statusCount'] = statusCount 

回答

2

您可以使用collections.Counter

In [2]: dic={'1234':{'alertStatus': 'open', 'reasonDescription': None}, 
    ...: '4321': {'alertStatus': 'closed', 'reasonDescription': 'Public'}, 
    ...: '6789': {'alertStatus': 'open', 'reasonDescription': 'None'}} 

In [3]: from collections import Counter 

In [4]: Counter(v['alertStatus'] for k,v in dic.items()) 

Out[4]: Counter({'open': 2, 'closed': 1}) 

幫助(計數器)

快譯通子類,用於計算哈希的項目。有時候叫一個包或者多套。元素存儲爲字典鍵值,它們的計數值爲 ,存儲爲字典值。

0

這樣的事情呢?

alertStatuses = [x['alertStatus'] for x in resultDict.values()] 

然後,您可以使用Counter object來計算那裏的元素。