2017-07-25 34 views
-1

我設置以下JSON代碼字典在Python 3。我會叫json_dataclassesclass每一個值到一個名爲lst列表。Retreive JSON鍵在Python

JSON CODE:

{ 
    "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

它實際上不需要是一個集合。它可以是一個列表 – James