如何解决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 举报,一经查实,本站将立刻删除。