2017-07-25 12 views
-1

Python 3では、次のJSONコードをjson_dataという辞書に設定しました。lstというリストにclassのすべての値をclassesに追加します。PythonでJSONキーを取得する

JSONコード:

{ 
    "images": [ 
     { 
     "classifiers": [ 
      { 
      "classes": [ 
       { 
       "class": "street", 
       "score": 0.846 
       }, 
       { 
       "class": "road", 
       "score": 0.85 
       }, 
       { 
       "class": "yellow color", 
       "score": 0.872 
       }, 
       { 
       "class": "green color", 
       "score": 0.702 
       } 
      ], 
      "classifier_id": "default", 
      "name": "default" 
      } 
     ], 
     "image": "images/parisstreets/paris-streets-1.jpg" 
     } 
    ], 
    "images_processed": 1 
} 

以下は、上記のJSON構造体の出力になります。ここで

{'street','road','yellow color','green color'} 

は、私が試したコードです。ここで

lst = list() 
def func(json_data): 
    for item in json_data['images'][0]['classifiers']['classes']: 
     class1 = item['class'] 
     lst.append(class1) 
    return(lst) 

コードを実行しようとしたとき、私は取得していますエラー/トレースバックです:

TypeError: list indices must be integers or slices, not str 

だから、それのように見えますリストに文字列を追加しようとしていますが、リストは整数またはスライスだけを取ります。私はスライスが何であるかを知ることはできませんが、テキストを文字列に変換することはできません。どうすればこの問題を解決できますか?

ありがとうございます! Brendan(Python 3.6.1、Windows 10 64bit)

+1

あなたの入力と予想される出力を教えていただきありがとうございます。これを行うために書いたコードを表示し、どこにいらっしゃるか説明してください。 –

+0

私はTypeErrorを取得しています:リストインデックスは、strではなく、そのエラーを使用し、そのエラーを修正するためにStackOverflowでの試行を試みていない整数またはスライスでなければなりません。 – James

+2

完全なトレースバックも編集として含めてください。 – roganjosh

答えて

2

最初の問題はclassifiersもリストであるため、classesに追加インデックスが必要です。

for item in json_data['images'][0]['classifiers'][0]['classes']: 

第二に、あなたがいないリストのセットとして結果をしたいので、あなたが行うことができます:これは動作しますreturn set(lst)を。セットは順序がないので、アイテムの順序がリストの順序と一致することは期待しないでください。

+0

注文するには? – James

+0

私たちがそのルートを降りる前に、なぜそれがセットであり、注文されている必要がありますか? – roganjosh

+0

それはactullyはセットである必要はありません。それはリストにすることができます – James

関連する問題