我试图将两个相同长度的数组(第一个是date作为字符串,第二个是double类型)转换成一个字典,其中年份作为键,date的zip和double作为值。
第一个问题是在添加这些值之后,这些值是否会保持顺序,因为我知道键不会。(数据按顺序添加)
第二个问题是为什么它不工作:
from datetime import datetime
def group_by_year(arr,raindata):
years = []
Data={}
for i in range(len(arr)):
temp = datetime.strptime(arr[i], '%d.%m.%Y').year
if temp not in years:
years.append(temp)
Data[temp]= None
for key in Data:
if temp == key:
Data[key] = zip(arr[i],raindata[i])
return Data
dates = ['01.03.2021','01.04.2021','01.01.2022']
rain = [0,5,8]
print(group_by_year(dates,rain))
预期输出为
{ 2021: [ ('01.03.2021',0), ('01.04.2021',5) ], 2022: [ ('01.01.2022',0) ]
有一个方法可以解决这个问题:
from datetime import datetime
def group_by_year(arr, raindata):
Data = {}
for x in zip(arr, raindata):
year = datetime.strptime(x[0], "%d.%m.%Y").year
Data.setdefault(year, []).append(x)
return Data
dates = ["01.03.2021", "01.04.2021", "01.01.2022"]
rain = [0, 5, 8]
print(group_by_year(dates, rain))
您的原始代码没有为字典中的项创建默认的空列表值,并且代码不必要地遍历字典的键以找到给定的键。