我需要向计数器添加项目,并且需要更加动态。
hash_data = [{'campaign_id': 'cid2504649263',
'country': 'AU',
'impressions': 9000,
'region': 'Cairns',
'utcdt': datetime.datetime(2013, 6, 4, 6, 0)},
{'campaign_id': 'cid2504649263',
'country': 'AU',
'impressions': 3000,
'region': 'Cairns',
'utcdt': datetime.datetime(2013, 6, 4, 6, 0)},
{'campaign_id': 'cid2504649263',
'country': 'AU',
'impressions': 3000,
'utcdt': datetime.datetime(2013, 6, 4, 7, 0)}]
例如,哈希列表中的最后一个元素不包含区域。然而,下面是我添加元素的方式,并会出错。
C = Counter()
for item in hash_data:
C[item['utcdt'],item['campaign_id'], item['country'], item['region']] += item[metric]
理想情况下这样但当然不起作用
C = Counter()
for item in hash_data:
m1 = item.keys()
m2 = []
for i in ml:
if i!='impression':
ms.add(i)
C[ml] += item[metric]
答案 0 :(得分:1)
C = Counter()
for item in hash_data:
C[tuple(item.values())] += item[metric]
答案 1 :(得分:0)
正如我在评论中提到的,你可以使用dict.get
预定义的默认值,如果dict中没有键,将返回该值。
default_region = 'default_region'
...
...
item.get('region', default_region)
如果你认为你的dict中可能缺少许多键,如果符合你的目的,你可以使用collections.defaultdict
(See this discussion)。或者,您只需创建一个包含所有可能键及其相应默认值的默认值的dict。一个小例子可能是:
defaults = {
'campaign_id': 'default_campaign_id',
'country': 'default_country',
'impressions': -1,
'region': 'default_region',
'utcdt': datetime.datetime.min,
}
for item in hash_data:
C[tuple(item.get(k, dv) for k, dv in defaults.items() if k != metric)] += item.get(metric, defaults[metric])
HTH!