繁体   English   中英

如何将dict值相加到元组列表中?

[英]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

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

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是 tuple 对象的 python 内置函数,因此当您使用该名称创建该变量时,您将覆盖具有相同名称的tuple python 内置函数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM