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

Python-元组列表变成其他形状的元组列表

如何解决Python-元组列表变成其他形状的元组列表

对于如何创建函数的最后部分感到困惑。

下面的功能需要读入数据,开始年份和结束年份。

请考虑以下内容

def summary_statistics(data,year_start,year_end):
    earthquake_count_by_year = []
    total_damages_by_year = []
    casualties_by_year = []
    year_count = {}
    dmg_sum = {}
    casualties = {}
    
    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]
            deaths = tuple[6]
            missing = tuple[7]
            injured = tuple[8]
            
            #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]] = dmgs
                else:
                    dmg_sum[tuple[0]] += dmgs
                    
                if tuple[0] not in casualties:
                    casualties[tuple[0]] = list(deaths + ',' + missing + ',' + injured)
                else:
                    casualties[tuple[0]] += list(deaths + ',' + injured)

        earthquake_count_by_year = list(year_count.items())
        total_damages_by_year = list(dmg_sum.items())
        casualties_by_year = list(casualties.items())

    
    L = [[earthquake_count_by_year],[total_damages_by_year],[casualties_by_year]]
    print(L)
    return L

我遇到麻烦的部分是:

                if tuple[0] not in casualties:
                    casualties[tuple[0]] = list(deaths + ',' + injured)

这是我需要伤亡人数[by_year []]的预期输出

[(2020,(deaths,missing,injured)),(2019,(2018,injured))]

所以我想做的是构造一个元组列表,按照上面显示的顺序,对于进入L的最终列表。它是年份的tuple [0],死亡的tuple [6],元组[7] ]表示丢失,tuple [8]表示受伤。

如何更正最后一个if / else以获取我要查找的元组列表?

列表理解?

编辑- 这就是“数据”在输入到函数中后的样子:

[(2020,1,6.0,'CHINA:  XINJIANG PROVINCE',39.831,77.106,2,0),(2020,6.7,'TURKEY:  ELAZIG AND MALATYA PROVINCES',38.39,39.081,41,1600,7.7,'CUBA: GRANMA;  CAYMAN IS;  JAMAICA',19.44,-78.755,'TURKEY: VAN;  IRAN',38.482,44.367,10,60,3,5.4,'BALKANS NW:  CROATIA:  ZAGREB',45.897,15.966,27,6000.0)]

解决方法

如果您要一个元组,请创建一个元组。就这么简单。您仍然可以正常使用括号符号,但是有时您需要构造函数。

但是首先,永远不要将变量命名为与某些重要的python类型相同的名称。您想创建一个tuple类型的实例,但是您有一个名为tuple的变量,因此现在“ tuple”表示该局部变量,并且您无法访问tuple构造函数,因为您已经隐藏了它的名称。我将其重命名为“ year_data”

现在,将元组添加在一起时,会变得更加有趣。参见Python element-wise tuple operations like sum

其余的已经存在。您只需要使用它。我删除了一些不相关的内容。

import operator

data = [
    (2020,1,6.0,'CHINA:  XINJIANG PROVINCE',39.831,77.106,2,0),(2020,6.7,'TURKEY:  ELAZIG AND MALATYA PROVINCES',38.39,39.081,41,1600,7.7,'CUBA: GRANMA;  CAYMAN IS;  JAMAICA',19.44,-78.755,'TURKEY: VAN;  IRAN',38.482,44.367,10,60,3,5.4,'BALKANS NW:  CROATIA:  ZAGREB',45.897,15.966,27,6000.0)
]

def summary_statistics(data):
    casualties = {}
    for index,year_data in enumerate(data):
        year = year_data[0]
        deaths = year_data[6]
        missing = year_data[7]
        injured = year_data[8]
        casualties_data = (deaths,missing,injured)

        if year not in casualties:
            casualties[year] = casualties_data
        else:
            # https://stackoverflow.com/a/497894/1766544
            casualties[year] = tuple(map(operator.add,casualties[year],(deaths,injured)))

    casualties_by_year = list(casualties.items())
    return casualties_by_year
    
result = summary_statistics(data)
print(result)

[(2020,(53,0,1689))

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

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?