2013-06-12 51 views
0

我有哈希看起來像下面的列表:如何在哈希列表中結合散列?

[{'campaign_id': 'cid2504649263', 
    'country': 'AU', 
    'impressions': 3000, 
    'region': 'Cairns', 
    'utcdt': datetime.datetime(2013, 6, 4, 6, 0)}, 
{'campaign_id': 'cid2504649263', 
    'country': 'AU', 
    'count': 9000, 
    'region': 'Cairns', 
    'utcdt': datetime.datetime(2013, 6, 4, 6, 0)}, 
{'campaign_id': 'cid2504649263', 
    'country': 'AU', 
    'count': 3000, 
    'region': 'Cairns', 
    'utcdt': datetime.datetime(2013, 6, 4, 7, 0)}] 

有需要被捲起來,因爲所有的尺寸都是相同的兩個哈希值,我需要總結的計數。所以...我將如何在itertools中使用python group來完成此任務?任何其他手段?

rolled_up = [{'campaign_id': 'cid2504649263', 
    'count': 12000, 
    'region': 'Cairns', 
    'utcdt': datetime.datetime(2013, 6, 4, 6, 0)}, 
{'campaign_id': 'cid2504649263', 
    'country': 'AU', 
    'count': 3000, 
    'region': 'Cairns', 
    'utcdt': datetime.datetime(2013, 6, 4, 7, 0)}] 
+0

你'impressions'和'count'? –

回答

2

如果需要一起滾動的項目是連續的,那麼groupby就可以。否則,你需要先對它們進行排序。我認爲一個collections.Counter將更好的爲您

>>> import datetime 
>>> from collections import Counter 
>>> C = Counter() 
>>> L =  [{'campaign_id': 'cid2504649263', 
... 'country': 'AU', 
... 'count': 3000,   # <== changed this to "count" 
... 'region': 'Cairns', 
... 'utcdt': datetime.datetime(2013, 6, 4, 6, 0)}, 
... {'campaign_id': 'cid2504649263', 
... 'country': 'AU', 
... 'count': 3000, 
... 'region': 'Cairns', 
... 'utcdt': datetime.datetime(2013, 6, 4, 6, 0)}, 
... {'campaign_id': 'cid2504649263', 
... 'country': 'AU', 
... 'count': 3000, 
... 'region': 'Cairns', 
... 'utcdt': datetime.datetime(2013, 6, 4, 7, 0)}] 
>>> for item in L:      # The ... represents the rest of the key 
...  C[item['campaign_id'], item['country'], ..., item['utcdt']] += item['count'] 
... 
C 
Counter({('cid2504649263', 'AU', datetime.datetime(2013, 6, 4, 6, 0)): 6000, ('cid2504649263', 'AU', datetime.datetime(2013, 6, 4, 7, 0)): 3000}) 

然後變換反回到你的列表格式

+0

我不得不說...那真是太棒了:)謝謝 – Tampa

+0

你是否讓代碼更具動感?如果我在一次迭代中沒有item ['campaign_id'],item ['country']?並在下一個唯一的項目['campaign_id']。現在它的硬編碼給定了固定鍵。鑰匙可以改變。 – Tampa

+0

@坦帕,你必須從你的字典中製作一個可排序的密鑰。例如'元組(我爲我在item.items()如果我[0]!='計數')'' –

0

有需要被捲起來,因爲所有的 尺寸是相同的兩個哈希和我需要總結一下。

如果這是你想要的,怎麼樣:

from collections import defaultdict 

d = defaultdict(int) 

for i in hashes: 
    d[i['campaign_id'],i['region']] += i['count'] 

for k in d: 
    print k[0],d[k]