2017-12-05 1 views
-1

Jahre, Monate, Tage, Stunden, Minuten Diese Werte werden von einem dict abgerufen. Jetzt möchte ich eine Zeichenfolge wie Jahre = 12 Monate = 1 erstellen, wenn es nur Jahre und Monate gibt. Betrachten Sie einen Fall nur Minuten und Sekunden. Dann sollte die Zeichenfolge Minuten = 1 Sekunden = 1 sein. Wie kann ich das effektiv machen? Die Beispieldaten können so aussehenErstellen einer Zeichenfolge durch Zugriff auf Wörterbuchwerte

Ich habe versucht, so etwas zu tun. Aber nicht funktioniert

years, months, days, hours, minutes = self.initial_data["months"], \ 
              self.initial_data["years"], \ 
              self.initial_data["days"], \ 
              self.initial_data["hours"], \ 
              self.initial_data["minutes"], 
    duration = if years: "years= {}".format(years) + \ 
      if months "months={}".format(months) +\ 
      and so on 

So ist die Zeichenfolge Änderung durch, wenn es Wert ist oder nicht

+1

Haben Sie eine Stichprobe der Daten? – Adriano

+0

Der korrekte Ausdruck ist 'value if condition else other othervalue'. Zum Beispiel '(" Jahre = {} ". Format (Jahre) wenn Jahre sonst" ") + ...' Sie haben auch einige andere Tippfehler dort. – Bilkokuya

Antwort

0

Neben schlechter Syntax (Sie nicht if so verwenden können), Sie machen dies komplizierter, als es braucht sein. Erstellen Sie einfach durch sie eine geordnete Karte und Schleife vorhandenen Felder aus self.initial_data zu extrahieren:

fields = ["years", "months", "days", "hours", "minutes", "seconds"] # ordered list 
data = self.initial_data # a shorthand for readability sake 
duration = " ".join("{}={}".format(f, data[f]) for f in fields if f in data) 

Sie eine zusätzliche data[f] Prüfung in der Dauer-Liste aufbauen hinzufügen können, wenn Sie Felder, deren Werte ignoriert werden sollen bewerten, um False (zB 0 , None usw.).

Verwandte Themen