2017-06-27 5 views
0

auspacken Ich habe diese Python-Liste lst4, die beim Drucken auf Logger logger.debug sieht aus wie this-Valueerror: zu viele Werte Python Fehler

["('08AM', '02-19')", "('14PM', '2204')", "('14PM', '3201')"] 

Jetzt verwenden, wenn ich

innr_lst = ["{Start Time: %s, Room Number: %s}" % (starttime, room_number) 
      for starttime, room_number in lst4] 

ich das bekommen Fehler:

ValueError: too many values to unpack

lst4 (Ende der Liste Verständnis oben) stammt aus einer Datenbank select:

def ret(): 
    SELECT Start_Time,Room_Number... 

    for i in resultSet1: 
     time = i[0] 
     rec = ((time).strftime('%H%p'), i[1]) 
     lst4.append(str(rec)) 

    return lst4 

def main_func(): 

    lst4 = ret() 

Wie kann ich dieses Problem lösen?

+1

Müssen Sie diese Werte als String speichern? Ich meine, Sie können "" ('08AM', '02 -19 ') "' as' ('08AM', '02 -19 ') 'speichern - ohne Anführungszeichen. –

+3

Sie haben keine Liste von Paaren, Sie haben eine Liste von _strings_. Vermutlich möchten Sie die inneren Werte der Tupel, die von diesen Strings beschrieben werden (z. B. "08 AM" und "02 -19"). Woher hast du diese Werte? Die beste Lösung besteht darin, sie an der Quelle zu reparieren. – Chris

+0

Mitglieder der 'lst4'-Liste sind Strings, keine Tupel. Beachten Sie die Anführungszeichen. Die "zu viele Werte" sind die Zeichen in jeder Zeichenfolge. – Roberto

Antwort

2

Jedes Element lst4 ist ein einzelner Wert: eine Zeichenfolge, wie

"('08AM', '02-19')" 

Diese ähnelt ein Tupel von Strings, aber es ist nicht: es ist eine einzelne Zeichenfolge, die Zeichen einschließlich Klammern enthalten geschieht und einfache Anführungszeichen. Folglich haben Sie nicht zwei Werte mit starttime, roomnumber zu extrahieren.

Um dies zu beheben, entfernen Sie die doppelten Anführungszeichen aus den Werten. Dies wird Sie mit einer Liste von Tupeln verlassen. Wenn Sie diese Kontrollebene nicht haben, müssen Sie jede Zeichenfolge in ihre Komponentenwerte analysieren: versuchen Sie, einen regulären Ausdruck zu verwenden, oder teilen Sie die Zeichenfolge einfach in das Komma und formatieren Sie das Tupel von den beiden Teilen neu.

+0

Ich habe einige weitere Informationen in meinem Beitrag hinzugefügt etwa von wo last4 kommt – user2916886

+1

Siehe den Kommentar von @PRMoureau: drop diese 'str' Operation in Ihrem' append' Befehl. – Prune

0

Wie gesagt, sollte lst4 Tupel von Strings enthalten, keine Strings, die wie Tupel von Strings aussehen. Zum Beispiel

[("08AM", "02-19"), ("14PM", "2204")] 

Mit dieser sagte, inner_lst sollte wohl auch eine Liste von Tupeln von Strings sein. Dies bedeutet, dass die String-Formatierung für die zwei Strings im Tupel separat durchgeführt werden muss.

innr_lst = [("Start Time: %s" % starttime, "Room Number: %s" % room_number) 
     for starttime, room_number in lst4] 
Verwandte Themen