簡體   English   中英

字典理解合並具有相同日期的字典列表中的所有值

[英]Dict comprehension merge all values in list of dicts with same date

我想添加同一年所有字典的值。 我一直在嘗試defaultdict ( https://docs.python.org/3/library/collections.html#defaultdict-examples ) 幾個小時,但找不到任何簡單地增加總數的例子。

我有一個看起來像這樣的字典列表:

[
    {
        "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)

使用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)]

一旦你有你的concatenated defaultdict(雖然你需要一個defaultdict(list)來保留重復!),運行一個總和作為列表理解:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM