2016-08-05 17 views
0

Ich kann nicht verstehen, wie alle Elemente zurück mit diesem Code:Python alle Elemente aus der Schleife zurückgeben?

@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 

Es gibt nur die erste „col“. Wenn ich die return-Anweisung außerhalb der Schleife verschiebe, wird nur das letzte Element in meiner Datenmenge zurückgegeben. Dies ist die Ausgabe, die von col_abs zurückgegeben:

('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']]) 

Kann mir jemand helfen, diese besser zu verstehen, wie ich ein „dict_comb“ für jeden Eintrag in col_abs zurückkehren will?

+0

Wenn ich anstelle einer Rückgabeanweisung gebe, die mir genau die Ausgabe gibt, die ich beim Drucken nach dem Schleifen über das Generatorobjekt brauche, muss ich irgendwie dieses Ergebnis ausgeben, damit ich es als Daten in einer anderen Methode verwenden kann? – MattE

Antwort

0

Ersetzen Sie Ihre return Anweisung durch eine yield Anweisung. Auf diese Weise kann Ihre Methode die Schleife fortsetzen, während nach jeder Iteration Werte zurückgegeben oder zurückgegeben werden.

+0

Danke, das gibt mir ein Generatorobjekt ... Wie gebe ich alle Elemente im Generatorobjekt zurück, damit ich diese neue Datenstruktur in einer anderen Funktion verwenden kann? Wenn ich versuche "für x in create_dataset(): return x 'dann gibt es mir wieder nur das erste Element im Generator? – MattE

Verwandte Themen