[{'id': 1, 'val':1}, {'id': 2, 'val':3}, {'id': 1, 'val':4} ]
Если значения `id` одинаковы, то необходимо сложить значения `val`, то есть получить
[{'id': 1, 'val':5}, {'id': 2, 'val':3} ]
[{'id': 1, 'val':1}, {'id': 2, 'val':3}, {'id': 1, 'val':4} ]
[{'id': 1, 'val':5}, {'id': 2, 'val':3} ]
lst = [{'id': 1, 'val':1}, {'id': 2, 'val':3}, {'id': 1, 'val':4}] def f(lst): dct = {} for x in lst: if x['id'] in dct: dct[x['id']] += x['val'] else: dct[x['id']] = x['val'] return [{'id': x, 'val': y} for x, y in dct.iteritems()]
>>> f(lst)
[{'id': 1, 'val': 5}, {'id': 2, 'val': 2}]
>>> lst = [{'id': 1, 'val':1}, {'id': 2, 'val':3}, {'id': 1, 'val':4}]
>>> f(lst)
[{'id': 1, 'val': 5}, {'id': 2, 'val': 3}]
if x['id'] in dct: dct[x['id']] += x['val'] else: dct[x['id']] = x['val']
dct[x['id']] = dct.get(x['id'], 0) + x['val']
[{'id': 1, 'val':1, 'a': 'd'}, {'id': 2, 'val':3, 'a': 'b' }, {'id': 1, 'val':4, 'a': 'c'} ]
slepovи что длать с новыми парами? проверять или складывать?
А если задачу слегка усложнить, например словари имеют несколько большее количество пар ключ:значение.
terabayt
и что длать с новыми парами? проверять или складывать?
[{'id': 1, 'val':1, 'a': 'd'}, {'id': 2, 'val':3, 'a': 'b' }, {'id': 1, 'val':4, 'a': 'd'} ]
data = [{'id': 1, 'val':1, 'a': 'd'}, {'id': 2, 'val':3, 'a': 'b' }, {'id': 1, 'val':4, 'a': 'c'} ] def f(d, x): k = x['id'] if k in d: d[k]['val'] += x['val'] else: d[k] = x return d print reduce(f, data, {}).values()
data = [{'id': 1, 'val':1, 'a': 'd'}, {'id': 2, 'val':3, 'a': 'b' }, {'id': 1, 'val':4, 'a': 'c'} ] def f(d, x): k = x['id'] if k in d: d[k]['val'] = max(x['val'] for d in data) else: d[k] = x return d print reduce(f, data, {}).values()