2016-05-09 10 views
0

Ich habe folgenden Python-Code ein verschachteltes Wörterbuch iterieren und einen Wert aus dem zweiten Kind greifen:Python2: Typeerror beim Überprüfen Wörterbuch Wertes

ret = some_dict 
for item, val in ret.items(): 
    for item2, val2 in val.items(): 
     print val2['result'] 

Wenn ich dies zu testen in IPython oder dem interaktiven Python-Interpreter, Der Code funktioniert einwandfrei und gibt den Wert von val2 ['result'] für jedes Element im Wörterbuch aus. Allerdings, wenn ich diesen Code-Block in einem Python-Programm verwenden, erhalte ich die folgende Fehlermeldung, wenn val2 [ 'Ergebnis'] Versuch zu drucken:

TypeError: string indices must be integers, not str

Wenn ich json.dumps (val2 Spiegelstrich = 2) zu drucken, Ich kann sehen, dass das Wörterbuch richtig gebildet ist. Der Versuch, dict() zu verwenden, um ein Wörterbuch zu werfen val2 in dem Skript mit dem folgenden Fehler fehlschlägt auch:

ValueError: dictionary update sequence element #0 has length 1; 2 is required

Ich bin nicht ganz sicher, was ich an dieser Stelle falsch mache, da der Code funktioniert in der interaktive Dolmetscher. Ich benutze Python 2.7.6, und der Anwendungsfall ist das Iterieren über ein Wörterbuch, das vom Saltstack Python-Client zurückgegeben wird.

+1

Ich vermute, dass 'some_dict' nicht das ist, was Sie denken, dass es ist. Ihr Code würde funktionieren, wenn er '{'outer_key': {'inner_key': {'result':" foo "}}}' wäre, aber Ihr Wörterbuch scheint nur '{'outer_key': {'inner_key':" foo "}}". –

+1

Setzen Sie das some_dict auf. –

+1

Fügen Sie einfach einen "print val2" vor der Zeile ein, die den Fehler erzeugt, um zu sehen, ob Sie den erwarteten Inhalt haben. –

Antwort

2

Glauben Sie der Nachricht: es sagt Ihnen, dass val2 eine Zeichenfolge ist, wenn Sie denken, dass es ein Diktat ist. Dies liegt wahrscheinlich daran, dass Ihre JSON-Daten nicht so strukturiert sind, wie Sie es für richtig halten.

+0

Du hattest die ganze Zeit recht, ich habe erwartet, dass ich über ein verschachteltes Diktat recherchiere, obwohl ich nicht wirklich –

+0

war. Wenn Sie das in den Rest Ihres Lebens übertragen, laufen Sie Gefahr, zu einem Dummkopf zu werden. – holdenweb

Verwandte Themen