如何在两个列表中使用相同的键对词典值进行求和?

时间:2016-04-14 13:21:24

标签: python

我有两个词典列表:

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},
]

我如何将两者结合起来才能得到:

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

from collections import Counter很有用,因为它可以使用相同的键对词典值进行求和,但我仍然无法弄清楚如何使用dictionairies列表。

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

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

1 个答案:

答案 0 :(得分:1)

更合乎逻辑的结构是拥有一个字典,其中货币为键,值为值。让我们使用defaultdict创建一个(以便新键自动开始为0):

currencies = defaultdict(int)

现在添加你的词组:

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

产生了类似的东西(不一定是相同的顺序):

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

现在,如果你真的需要,将它转换回像你这样的列表:

rich_and_poor = [{'currency': key, 'value': value} for key, value in currencies.items()]