微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

考虑以下功能

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

例如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内置函数

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。