Setup
thing = [
[{'Total Black': 3, 'Total Color': 2, 'Account ID': '2222', 'Account Name': 'Moe'},
{'Total Black': 5, 'Total Color': 4, 'Account ID': '3333', 'Account Name': 'Larry'},
{'Total Black': 9, 'Total Color': 6, 'Account ID': '4444', 'Account Name': 'Curly'}],
[{'Total Black': 8, 'Total Color': 4, 'Account ID': '2222', 'Account Name': 'Moe'},
{'Total Black': 2, 'Total Color': 7, 'Account ID': '3333', 'Account Name': 'Larry'},
{'Total Black': 11, 'Total Color': 9, 'Account ID': '4444', 'Account Name': 'Curly'}]
]
与斯科特波士顿非常相似
pd.DataFrame(sum(thing, [])).groupby(
['Account ID', 'Account Name'], as_index=False
).sum().to_dict('r')
merge_with
from itertools import chain
from toolz.dicttoolz import merge_with
from collections import defaultdict
idkey = ('Account ID', 'Account Name')
x = defaultdict(list)
for d in map(dict, chain(*thing)):
x[(*map(d.pop, idkey),)].append(d)
[{**dict(zip(idkey, key)), **merge_with(sum, *d)} for key, d in x.items()]
[{'Account ID': '2222',
'Account Name': 'Moe',
'Total Black': 11,
'Total Color': 6},
{'Account ID': '3333',
'Account Name': 'Larry',
'Total Black': 7,
'Total Color': 11},
{'Account ID': '4444',
'Account Name': 'Curly',
'Total Black': 20,
'Total Color': 15}]