2016-06-09 6 views
0

Когда я печатаю каждый элемент отдельно (см. Комментарий ниже), они выдаются правильно. Однако, когда я пытаюсь заполнить список словарями, он выходит пустым! Может ли кто-нибудь понять, почему?Почему мой список не сохраняется правильно (python)

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 
+0

, потому что может быть ваша другая часть не выполнена. –

+1

Не могли бы вы вкратце объяснить, что такое данные во всехData? Трудно понять это только из кода. – Tim

+0

скорее ваша другая часть * * выполняется * - это данные, одинаковые для обоих вызовов? – zEro

ответ

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 
0

Хорошо. Поэтому я думаю, что вызывает ваше замешательство в том, что функция ничего не возвращает (нет?). Посмотрите на измененную часть ниже, я добавил только оператор 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 

Вещь в зависимости от того, что вы хотите сделать, вы могли бы разворачиваться повсюду. Вы коротко замыкаетесь, возвращая yearSnow, когда year >2012, но в противном случае вы не возвращаете никаких значений из этой функции. И поскольку вы ничего не печатаете, вы ничего не видите.

Try делает:

x = getAnnualSnow(allData) 
print x 
type(x) 

Учитывая ваш фрагмент кода, похоже, результат должен быть None (но у меня нет данных, чтобы доказать, что).

EDIT

Имея более внимательно посмотрел на фрагменте кода, это похоже на проблему

year = allData[0]['year'] 

То, что вы, вероятно, хотите сделать это

year = monthData['year'] 

просто, прежде чем делать if year <= 2012 сравнение , Потому что, поскольку он стоит, вы всегда сравниваете с годом первой записи до 2012 года, поэтому независимо от того, возвращает ли ваш фрагмент значение, зависит от этого факта. Он никогда не попадет в «главную» часть else, если он когда-либо попал в «главную» if. (звучит свернуто, как я читал снова. Надеюсь, это ясно)

Смежные вопросы