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)

dict に存在しないと思われるキーが多数ある場合は、それがcollections.defaultdict目的に合っている場合に使用できます (このディスカッションを参照してください)。または、すべての可能なキーとそれに対応するデフォルト値を含むデフォルト値の 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])

チッ!

于 2013-06-12T10:57:45.447 に答える