2014-01-13 54 views
2

我試圖找出一種方法將字典值分組爲間隔,具體取決於密鑰的值。使用python將字典值分塊成塊

在我的情況下,我有兩個鍵:'timestamp''value';我需要根據值對它進行間隔分組。我的數據結構是這樣的一個:

[{'timestamp': u'1389631816', 'value': u'0'}, 
{'timestamp': u'1389633136', 'value': u'0'}, 
{'timestamp': u'1389633256', 'value': u'1'}, 
{'timestamp': u'1389633316', 'value': u'1'}, 
{'timestamp': u'1389633196', 'value': u'0'}, 
{'timestamp': u'1389633196', 'value': u'0'}, 
{'timestamp': u'1389633196', 'value': u'0'}, 
{'timestamp': u'1389633316', 'value': u'1'}] 

在這種情況下,我應該有4組:

First Group: 2 items, based on value '0'; 
Second Group: 2 items, based on value '1'; 
Third Group: 3 items, based on value '0'; 
Fourth Group: 1 item, based on value '1'. 

對於所有的目的,我需要這些羣體的時間之間的度量(即將從ICMP檢查Zabbix在這個例子中)創建一個報告,但我真的被卡在這裏。

回答

4

使用itertools.groupby()功能組這些:

from itertools import groupby 
from operator import itemgetter 

for value, group in groupby(list_of_dicts, key=itemgetter('value')): 
    print 'Group for value {}'.format(value) 
    for d in group: 
     print d 

演示:

>>> from itertools import groupby 
>>> from operator import itemgetter 
>>> list_of_dicts = [{'timestamp': u'1389631816', 'value': u'0'}, 
... {'timestamp': u'1389633136', 'value': u'0'}, 
... {'timestamp': u'1389633256', 'value': u'1'}, 
... {'timestamp': u'1389633316', 'value': u'1'}, 
... {'timestamp': u'1389633196', 'value': u'0'}, 
... {'timestamp': u'1389633196', 'value': u'0'}, 
... {'timestamp': u'1389633196', 'value': u'0'}, 
... {'timestamp': u'1389633316', 'value': u'1'}] 
>>> for value, group in groupby(list_of_dicts, key=itemgetter('value')): 
...  print 'Group for value {}'.format(value) 
...  for d in group: 
...   print d 
... 
Group for value 0 
{'timestamp': u'1389631816', 'value': u'0'} 
{'timestamp': u'1389633136', 'value': u'0'} 
Group for value 1 
{'timestamp': u'1389633256', 'value': u'1'} 
{'timestamp': u'1389633316', 'value': u'1'} 
Group for value 0 
{'timestamp': u'1389633196', 'value': u'0'} 
{'timestamp': u'1389633196', 'value': u'0'} 
{'timestamp': u'1389633196', 'value': u'0'} 
Group for value 1 
{'timestamp': u'1389633316', 'value': u'1'} 
+0

非常有趣的使用itemgetter的。代碼易於理解和完全pythonic。謝謝 –