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

问题描述

考虑以下功能

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

例如sumarry_statistics(data,2015,2020)

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

所以我有很多东西,可以用来创建我的第一个元组列表,该列表每年都计数,以及该年发生了多少次时间:

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())

打印输出(地震计数_年):

[(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,etc. 

解决方法

你可以做

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

编辑:添加有关答案和上下文的更多信息 您不能在以下位置向尚未分配的变量添加值:

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

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

请注意在data中迭代所用的变量名:

for index,tuple in enumerate(data):

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...