如何将字典值求和到元组列表中?

How to sum of dict values into list of tuples?

考虑以下函数:

我需要确定作为输入的年份范围内每一年的总和。

例如,sumarry_statistics(data, 2015, 2020)

我需要为在该年份范围内具有 [0] 的元组列表中的每个元组找到 col[9] 的总和。

所以我有这么多,用于创建我的第一个元组列表,每年计数,以及那一年发生了多少次:

def summary_statistics(data, year_start, year_end):
    earthquake_count_by_year = []
    total_damages_by_year = []
    casualties_by_year = []
    year_count = {}
    dmg_sum = {}
    
    years = []
    year_start = int(year_start)
    year_end = int(year_end)
    
    if year_end >= year_start:
        
        #store year range into list
        years = list(range(year_start, year_end+1))
        
        for index, tuple in enumerate(data):
            #values to be summed for each year in dmg_sum
            yr = tuple[0]
            dmgs = tuple[9]
            
            #if year in range of years (year_start - year_end)
            if tuple[0] in years:
                #if year does not exist in dict, set it to 0
                if tuple[0] not in year_count:
                    year_count[tuple[0]] = 0
                #count number of occurences for each year
                year_count[tuple[0]] += 1
       earthquake_count_by_year = list(year_count.items())

打印输出(earthquake_count_by_year):

[(2015, 48), (2016, 52), (2017, 64), (2018, 65), (2019, 60), (2020, 24)]

我需要写一些类似的东西,但不是计算出现的次数,我需要找到每年作为输入的 col[9] 的总和。

我不知道之后该怎么办:

for index, tuple in enumerate(data):
    #values to be summed for each year in dmg_sum
    yr = tuple[0]
    dmgs = tuple[9]
    
    #if year in range of years (year_start - year_end)
    if tuple[0] in years:
        #if year does not exist in dict, set it to 0
        if tuple[0] not in year_count:
            year_count[tuple[0]] = 0
        #count number of occurences for each year
        year_count[tuple[0]] += 1
        
        if tuple[0] not in dmg_sum:
            dmg_sum[tuple[0]] += sum(dmg_sum.values())

最后一行对我来说尤其成问题。这是行不通的。我认为我什至无法非常清楚地描述我需要在这里做什么。 tuple[0] 是一个包含年份列表的 csv 列。 tuple[9] 是代表死亡人数的整数列表。我需要找到每年的死亡人数作为输入并以相同的方式存储,元组列表如下:

[(year, sum of [9]), (year2, sum of [9]), etc. 

你可以做到

if tuple[0] not in dmg_sum:
    dmg_sum[tuple[0]] = dmgs
else:
    dmg_sum[tuple[0]] += dmgs

编辑:添加更多关于答案和上下文的信息 您不能向尚未分配的变量添加值,in:

if tuple[0] not in dmg_sum:
        dmg_sum[tuple[0]] += dmgs

并且您遍历包含特定年份 tuple[0] 和代表死亡人数的数字 tuple[9] 的数据,因此对于 for 循环的每次迭代,如果您的条件得到尊重,如果关键代表你要分配数据的字典不存在你添加它并分配相应的数据,即dmgs,否则你将数据添加到它

小心你用来迭代 data in:

的变量名
for index, tuple in enumerate(data):

tuple 是元组对象的 python 内置函数,因此当您使用该名称创建该变量时,您会覆盖具有相同名称的 tuple python 内置函数