How can I sum value from array in dictionary with python?

Viewed 54

the dictionary data look like this

[
{'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},]

and the result is sum vl if only br and mnt have same value

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

If you can use pandas, try this:

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

This outputs:


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

If you really need to, you can turn it back into a list of dictionaries with:

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)

output:

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