2016-05-09 10 views
0

私は、ネストされた辞書を反復処理し、第二子から値を取得するには、次のPythonコード持っている:私はIPythonまたは対話型のPythonインタプリタでこれをテストする場合Python2:TypeError例外辞書値を確認しながら

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

を、コードは正常に動作し、辞書の各項目のval2 ['result']の値を出力します。私はPythonプログラムにコードブロックを使用する場合[「結果」] VAL2印刷しようとするときしかし、私は次のエラーを取得する:

TypeError: string indices must be integers, not str

私はjson.dumps(VAL2、インデント= 2)を印刷した場合、辞書が正しく形成されているのが分かります。

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

コードはで動作するので、私は、私はこの時点で間違ってやって完全にはよく分からない:スクリプトはまた、次のエラーで失敗して辞書にval2のキャストするのdict()を使用しようとすると、インタラクティブなインタプリタ。私はPython 2.7.6を使用していますが、ユースケースはSaltstack Pythonクライアントから返された辞書を反復しています。

+1

私は 'some_dict'はあなたが思うものではないと推測しています。あなたのコードは '{'outer_key':{'inner_key':{'result':" foo "}}}'ならばあなたの辞書は '{'outer_key':{'inner_key':" foo "}}'。 –

+1

some_dictを書いてください。 –

+1

エラーが発生した行の前に "print val2"を挿入し、予期した内容があるかどうかを確認してください。 –

答えて

2

メッセージを信じてください:val2は文字列であると思います。これは、あなたが思うようにJSONデータが構造化されていないためです。

+0

あなたはまっすぐだった、私は実際に私がいないときに入れ子にされたdictを反復することを期待していた –

+0

プログラムを学ぶ戦いの半分は非常にリテラルであることを学んでいる。残念なことに、これがあなたの人生の残りの部分に持ち越されるならば、あなたは鈍い思いをする危険があります。 – holdenweb

関連する問題