HereHere - 1 year ago 82
Python Question

# How to sum dictionaries values with same key inside two list?

I have two list with dictionaries:

``````rich = [
{'currency': 'USD', 'value': 100},
{'currency': 'EUR', 'value': 110},
{'currency': 'USD', 'value': 120},
{'currency': 'GBP', 'value': 130},
]

poor = [
{'currency': 'USD', 'value': 10},
{'currency': 'AED', 'value': 20},
]
``````

how can I combine both so that I can get:

``````rich_and_poor = [
{'currency': 'USD', 'value': 110},  # +10
{'currency': 'EUR', 'value': 110},
{'currency': 'GBP', 'value': 130},
{'currency': 'AED', 'value': 20}  # new dictionary
]
``````

?

The
`from collections import Counter`
is useful, because it can sum dictionaries values with same key, but I still can't figure out how to do it with list of dictionairies.

``````x = {'value': 123}
y = {'value': 2}

Counter(x) + Counter(y) = {'value': 125}
``````

A more logical structure for this would be to have one dictionary, with currencies as keys and values as values. Let's use a defaultdict to create one (so that new keys start out as 0 automatically):

``````currencies = defaultdict(int)
``````

``````for currencydict in rich + poor:
currencies[currencydict['currency']] += currencydict['value']
``````

That yielded something like (not necessarily the same order):

``````{
'USD': 230,
'EUR': 110,
'GBP': 130,
'AED': 20
}
``````

And now, if you really have to, convert it back to a list like yours:

``````rich_and_poor = [{'currency': key, 'value': value} for key, value in currencies.items()]
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download