2016-08-05 111 views
0

我想不出如何返回使用此代碼的所有物品:Python從循環返回所有項目?

@staticmethod 
    def create_dataset(): 
     cols = Colleagues.get_all_colleagues() 
     cols_abs = ((col['Firstname'] + " " + col['Surname'], col['Absences']) for col in cols) 
     for col in cols_abs: 
      dataset = list() 
      sum_days = list() 
      for d in col[1]: 
       start_date = d[0] 
       end_date = d[1] 
       s = datetime.strptime(start_date, "%Y-%m-%d") 
       e = datetime.strptime(end_date, "%Y-%m-%d") 
       startdate = s.strftime("%b-%y") 
       days = numpy.busday_count(s, e) + 1 
       sum_days.append(days) 
       days_per_month = startdate, days 
       dataset.append(days_per_month) 
      dict_gen1 = dict(dataset) 
      comb_days = sum(sum_days) 
      dict_gen2 = {'Name': col[0], 'Spells': len(col[1]), 'Total(Days)': comb_days} 
      dict_comb = [{**dict_gen1, **dict_gen2}] 
      return dict_comb 

它只返回第一個「關口」。如果我在循環之外移動return語句,它將只返回我的數據集中的最後一個項目。這是從col_abs返回的輸出:

('Jonny Briggs', [['2015-08-01', '2015-08-05'], ['2015-11-02', '2015-11-06'], ['2016-01-06', '2016-01-08'], ['2016-03-07', '2016-03-11']]) 
('Matt Monroe[['2015-12-08', '2015-12-11'], ['2016-05-23', '2016-05-26']]) 
('Marcia Jones', [['2016-02-02', '2016-02-04']]) 
('Pat Collins', []) 
('Sofia Marowzich', [['2015-10-21', '2015-10-30'], ['2016-03-09', '2016-03-24']]) 
('Mickey Quinn', [['2016-06-06', '2016-06-08'], ['2016-01-18', '2016-01-21'], ['2016-07-21', '2016-07-22']]) 
('Jenifer Andersson', []) 
('Jon Fletcher', []) 
('James Gray', [['2016-04-01', '2016-04-06'], ['2016-07-04', '2016-07-07']]) 
('Matt Chambers', [['2016-05-02', '2016-05-04']]) 

誰能幫助我更好地理解這種因爲我想返回「dict_comb」在col_abs每個條目?

+0

如果我在使用返回語句而不是使用返回語句的時候給出了完整的輸出結果,那麼我需要以某種方式輸出該結果以便在另一個方法中將其用作數據時打印出來。 – MattE

回答

0

yield聲明替換您的return聲明。這將允許您的方法在每次迭代後「屈服」或返回值時繼續循環。

+0

謝謝,這給了我一個生成器對象...如何返回生成器對象中的所有項目,以便我可以在另一個函數中使用新的數據結構?當我在create_dataset()中嘗試'for x:return x'時,它再次只給出了生成器中的第一項? – MattE