我有以下字典列表:

dictionary =[{'Flow': 100, 'Location': 'USA', 'Name': 'A1'},
            {'Flow': 90, 'Location': 'Europe', 'Name': 'B1'},
            {'Flow': 20, 'Location': 'USA', 'Name': 'A1'},
            {'Flow': 70, 'Location': 'Europe', 'Name': 'B1'}]

我想创建一个新的字典列表,其中所有字典的总和Flow值都相同。我期望的输出是:
new_dictionary =[{'Flow': 120, 'Location': 'USA', 'Name': 'A1'},
            {'Flow': 160, 'Location': 'Europe', 'Name': 'B1'},]

我怎样才能做到这一点?

最佳答案

这是可能的,但在Python中实现并不容易。我可以建议你用熊猫吗?这对于groupbysumto_dict很简单。

import pandas as pd

(pd.DataFrame(dictionary)
   .groupby(['Location', 'Name'], as_index=False)
   .Flow.sum()
   .to_dict('r'))

[{'Flow': 160, 'Location': 'Europe', 'Name': 'B1'},
 {'Flow': 120, 'Location': 'USA', 'Name': 'A1'}]

要安装,请使用pip install --user pandas
否则,可以使用itertools.groupby应用伪通用组操作。
from itertools import groupby
from operator import itemgetter

grouper = ['Location', 'Name']
key = itemgetter(*grouper)
dictionary.sort(key=key)

[{**dict(zip(grouper, k)), 'Flow': sum(map(itemgetter('Flow'), g))}
    for k, g in groupby(dictionary, key=key)]

[{'Flow': 160, 'Location': 'Europe', 'Name': 'B1'},
 {'Flow': 120, 'Location': 'USA', 'Name': 'A1'}]

10-08 06:41