Python Dict理解合并具有相同日期的Dict列表中的所有值

Python Dict理解合并具有相同日期的Dict列表中的所有值,python,Python,我想在同一年增加所有目录的价值。我已经尝试了几个小时的defaultdict(),但是找不到任何简单地增加总数的例子 我有一个清单,上面是这样的: [ { "year": 2020, "value": 6500.0 }, { "year": 2020, "value": 40500.0 }, { "year": 2019, "value": 6500.0

我想在同一年增加所有目录的价值。我已经尝试了几个小时的
defaultdict
(),但是找不到任何简单地增加总数的例子

我有一个清单,上面是这样的:

[
    {
        "year": 2020,
        "value": 6500.0
    },
    {
        "year": 2020,
        "value": 40500.0
    },
    {
        "year": 2019,
        "value": 6500.0
    },
    {
        "year": 2019,
        "value": 20000.0
    }
]
[
    {
        "year": 2020,
        "value": 47000.0
    }
    {
        "year": 2019,
        "value": 26500.0
    }
]
我希望它看起来像这样:

[
    {
        "year": 2020,
        "value": 6500.0
    },
    {
        "year": 2020,
        "value": 40500.0
    },
    {
        "year": 2019,
        "value": 6500.0
    },
    {
        "year": 2019,
        "value": 20000.0
    }
]
[
    {
        "year": 2020,
        "value": 47000.0
    }
    {
        "year": 2019,
        "value": 26500.0
    }
]
我尝试了大量的
defaultdict
,比如:

all_won_deals = //contains dict above
concenated = collections.defaultdict(set)
for k, v in all_won_deals:
    concenated[k].add(v)

一旦您的
连接了
defaultdict(尽管您需要一个
defaultdict(list)
来保留重复项!),在其上运行一个总和作为列表:

sums = [{"year": key, "value": sum(values)} for (key, values) in concatenated.items()]

一旦您的
连接了
defaultdict(尽管您需要一个
defaultdict(list)
来保留重复项!),在其上运行一个总和作为列表:

sums = [{"year": key, "value": sum(values)} for (key, values) in concatenated.items()]

更容易使用
itertools.groupby

from itertools import groupby
from operator import itemgetter

get_year = itemgetter('year')  # For sorting and grouping
get_value = itemgetter('value')  # For aggregating

result = [{'year': y, 
           'value': sum(map(get_value, ds))
          } 
          for y, ds in groupby(sorted(all_won_deals, key=get_year), get_year)]

更容易使用
itertools.groupby

from itertools import groupby
from operator import itemgetter

get_year = itemgetter('year')  # For sorting and grouping
get_value = itemgetter('value')  # For aggregating

result = [{'year': y, 
           'value': sum(map(get_value, ds))
          } 
          for y, ds in groupby(sorted(all_won_deals, key=get_year), get_year)]