当我单独打印每个项目时(请参阅下面的评论),它们会正确显示。但是,当我尝试使用词典填充列表时,它会显示为空!任何人都可以找出原因吗?
NULL
答案 0 :(得分:0)
如果列表为空,可能不会返回? 我只改变了最后一个。
if year <= 2012:
if monthData['year'] == year:
totalSnow = totalSnow + monthData['snow']
else:
totalAnnSnow = {'year':year, 'totalsnow':round(totalSnow,1)}
#print(totalAnnSnow)
annualSnow.append(totalAnnSnow)
year = year + 1
totalSnow = 0
if year > 2012 and annualSnow:
return annualSnow
答案 1 :(得分:0)
好。所以我认为导致你混淆的是该函数没有返回任何内容(无?)。看下面修改过的else部分,我只添加了一个return语句。
def getAnnualSnow(allData):
annualSnow = []
year = allData[0]['year']
totalSnow = 0
for monthData in allData:
if year <= 2012:
if monthData['year'] == year:
totalSnow = totalSnow + monthData['snow']
else:
totalAnnSnow = {'year':year, 'totalsnow':round(totalSnow,1)}
#print(totalAnnSnow)
annualSnow.append(totalAnnSnow)
year = year + 1
totalSnow = 0
else:
return annualSnow
# return annualSnow here!!
return annualSnow
事情取决于你想做什么,你可以到处分支。您在year >2012
时返回annualSnow进行短路,但是否则您不会从此函数返回任何值。而且因为你没有打印任何东西,你什么都看不到。
尝试做:
x = getAnnualSnow(allData)
print x
type(x)
鉴于您的代码段,您的输出似乎应为None
(但我没有您的数据证明这一点)。
修改强>
仔细查看了这个片段后,这似乎是一个问题
year = allData[0]['year']
您可能想要做的是
year = monthData['year']
在进行if year <= 2012
比较之前。因为就目前而言,您总是在与2012年的第一个条目进行比较,因此您的代码段是否返回值取决于该事实。它永远不会进入'主'else
部分,如果它进入'主'if
。 (听起来很复杂,我再读一遍。我希望很清楚)