Python从循环返回所有项目?

问题描述:

我想不出如何返回使用此代码的所有物品: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

yield声明替换您的return声明。这将允许您的方法在每次迭代后“屈服”或返回值时继续循环。

+0

谢谢,这给了我一个生成器对象...如何返回生成器对象中的所有项目,以便我可以在另一个函数中使用新的数据结构?当我在create_dataset()中尝试'for x:return x'时,它再次只给出了生成器中的第一项? – MattE