2017-12-06 15 views
0

私はdictからデータを解析しようとしています。以下はdictです。Pythonでネストされたdictからデータを取得する

data = {'specs': u'{"software_addon": None, 
"checkout_os": 
    {12L: {"status": 3L, "units": 1L, "label": "Disk1", "orderproduct_id": 22L, "slider_id": 788L, "unitPrice": 0.3}, 
    15L: {"status": 3L, "units": 60L, "label": None, "orderproduct_id": 22L, "slider_id": 787L, "unitPrice": 0.3}}, 
"checkout_op": {"pk": 11L, "total_price": 90.3, "discount_price": 80.3, "monthly_fee": 80.3}, 
"virtualmachine_vm": {"pk": 15L, "diskGB": 101L, "memoy_size": 3221225472L, "num_cpu": 2L}, 
"checkout_o": {"pk": 74L, "grand_total": 180.3, "discount_price": 180.3} 
}', 
'id': 411L, 'name': u'name-7xccf'} 

データを取得しようとすると、エラーが発生します。

print data['specs']['virtualmachine_virtualmachines']['pk'] 

エラー:文字列のインデックスは、私はそれを試してみました(でも、イーストウッドの提案で)あなたと同じエラーを得た

+0

印刷データ[ 'スペック'] [ 'virtualmachine_vm'] [ 'PK'] – Eastwood

+1

データ[ "スペック"]あなたの例では文字列がある働いた、それは期待しdata ['specs'] [2]のようにintでインデックス付けされる文字列。おそらくいくつかの引用符を削除する必要があります。 – meggar

答えて

1

をstrない、整数でなければなりませんが、それが解消した後に働きましたu'と対応する終了引用符。 明らかに、このu演算子/修飾子は、dict全体に使用できません。

だから

data = {'specs': {"software_addon": None, "checkout_os": {12L: {"status": 3L, "units": 1L, "label": "Disk1", "orderproduct_id": 22L, "slider_id": 788L, "unitPrice": 0.3}, 15L: {"status": 3L, "units": 60L, "label": None, "orderproduct_id": 22L, "slider_id": 787L, "unitPrice": 0.3}}, "checkout_op": {"pk": 11L, "total_price": 90.3, "discount_price": 80.3, "monthly_fee": 80.3}, "virtualmachine_vm": {"pk": 15L, "diskGB": 101L, "memory_size": 3221225472L, "num_cpu": 2L}, "checkout_o": {"pk": 74L, "grand_total": 180.3, "discount_price": 180.3} }, 'id': 411L, 'name': u'name-7xccf'} 
print data['specs']['virtualmachine_vm']['pk'] 

+0

同じエラーが表示されたら、それはうまく動作します。印刷データ['名前'] – Eastwood

+0

これは奇妙です。投稿したコードをコピー/ペーストしましたか?私はここでPython 2.7.5を使用し、それは答えを印刷しました(15) – Ronald

+0

技術的に正しいです、このコードは私が明示的にこのdictを使用する場合に動作します。私の問題はdictを通しての建設でした。私は仕事をしなかった余分な引用符を削除しました。私は完全なdictの操作をしていた。それは私が 'specs'をpython dictに変換してから 'data' dictに追加することで解決されます。それは今働く。 – Eastwood