我如何用python从字典中数组求和值?



字典数据是这样的

[
{'br' : 'Kadek', 'mnt' : '2020-10', 'vl' : 30},
{'br' : 'Kadek', 'mnt' : '2020-10', 'vl' : 40},
{'br' : 'Kadek', 'mnt' : '2020-10', 'vl' : 20},
{'br' : 'Dede', 'mnt' : '2020-5', 'vl' : 20},
{'br' : 'Dede', 'mnt' : '2020-5', 'vl' : 40},]

,当br和MNT具有相同的值

时,结果为sum vl
[
{'br' : 'Kadek', 'mnt' : '2020-10', 'vl' : 90},
{'br' : 'Dede', 'mnt' : '2020-5', 'vl' : 60}
]

如果您可以使用pandas,请尝试:

import pandas as pd 
data = [{'br' : 'Kadek', 'mnt' : '2020-10', 'vl' : 30},
{'br' : 'Kadek', 'mnt' : '2020-10', 'vl' : 40},
{'br' : 'Kadek', 'mnt' : '2020-10', 'vl' : 20},
{'br' : 'Dede', 'mnt' : '2020-5', 'vl' : 20},
{'br' : 'Dede', 'mnt' : '2020-5', 'vl' : 40}]
# turn data into a pandas dataframe
df = pd.DataFrame(data)
# take the sum when br and mnt are the same
df_grouped = df.groupby(['br','mnt']).agg({'vl':'sum'}).reset_index()
df_grouped

这个输出:


br      mnt     vl
0   Dede    2020-5  60
1   Kadek   2020-10 90

如果确实需要,可以使用以下命令将其转换回字典列表:

df_grouped.to_dict('records')
from collections import Counter 
data = [
{'br' : 'Kadek', 'mnt' : '2020-10', 'vl' : 30},
{'br' : 'Kadek', 'mnt' : '2020-10', 'vl' : 40},
{'br' : 'Kadek', 'mnt' : '2020-10', 'vl' : 20},
{'br' : 'Dede', 'mnt' : '2020-5', 'vl' : 20},
{'br' : 'Dede', 'mnt' : '2020-5', 'vl' : 40},]
cnt = Counter()
for i in data:
cnt[i['br'], i['mnt']] += i['value']
result = ([{'br': k[0], 'mnt': k[1], 'value': v}
for k, v in cnt.items()])
print(result)

输出:

[{'br': 'Kadek', 'mnt' : '2020-10', 'value': 90},
{'br': 'Dede', 'mnt' : '2020-5', 'value': 60}]

最新更新