0

我需要将项目添加到柜台并且需要更加动态。

  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]
4

2 回答 2

1
C = Counter()
for item in hash_data:
  C[tuple(item.values())] += item[metric]
于 2013-06-12T09:46:25.997 回答
0

正如我在评论中提到的,您可以使用dict.get预定义的默认值,以防字典中不存在密钥。

default_region = 'default_region'
...
...
item.get('region', default_region)

如果您认为您的字典中可能缺少许多键,则可以collections.defaultdict在适合您的目的时使用(请参阅此讨论)。或者,您可以简单地创建一个包含所有可能键及其相应默认值的默认值的字典。一个小例子可能是:

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])

于 2013-06-12T10:57:45.447 回答