2016-08-22 8 views
3

イム新しいネストされたデータから抽出して、いくつかのネストされたデータPythonのリスト理解は - ここでは、2つの製品のためのJSONでのpythonへ

を抽出しようとしていました。商品は0個以上のカテゴリに属する​​ことができます

{  
    "Item":[  
     {  
     "ID":"170", 
     "InventoryID":"170", 
     "Categories":[  
      {  
       "Category":[  
        {  
        "CategoryID":"444", 
        "Priority":"0", 
        "CategoryName":"Paper Mache" 
        }, 
        {  
        "CategoryID":"479", 
        "Priority":"0", 
        "CategoryName":"Paper Mache" 
        }, 
        {  
        "CategoryID":"515", 
        "Priority":"0", 
        "CategoryName":"Paper Mache" 
        } 
       ] 
      } 
     ], 
     "Description":"Approximately 9cm wide x 4cm deep.", 
     "SKU":"111931" 
     }, 
     {  
     "ID":"174", 
     "InventoryID":"174", 
    " Categories":[  
      {  
       "Category":{  
        "CategoryID":"888", 
        "Priority":"0", 
        "CategoryName":"Plaster" 
       } 
      } 
     ], 
     "Description":"Plaster Mould - Australian Animals", 
     "SKU":"110546" 
     } 
    ], 
    "CurrentTime":"2016-08-22 11:52:27", 
    "Ack":"Success" 
} 

商品が属するカテゴリを特定したいと思います。

次のように抽出するための私のコードは: -

 for x in products: 
      productsInCategory = [] 
      for y in x['Categories']: 
       for z in y['Category']: 
        if z['CategoryID'] == categories[i]['CategoryID']: 
         productsInCategory.append(x) 

この問題は、この場合、第2のアイテムは一つだけカテゴリ、このライン

for z in y['Category']: 

のでカテゴリのない配列を含んでいることですカテゴリのプロパティをループし、カテゴリ配列ではないためコードが失敗する

これを防ぐにはどうすればよいですか?そしてこれはリストの理解構文でよりエレガントに書くことができますか?

答えて

4

この場合、これは非常に貧弱なドキュメント構造です。あなたはこれに対処する必要はありません。項目に複数の値を含めることができる場合は、常にリストにする必要があります。

それがリストであるかどうかをチェックすることで、コード内で引き続き対処できます。私は頻繁にある前に、この問題に遭遇しました

+0

ありがとうございます - それは治療をしました – David

1

;

for x in products: 
    productsInCategory = [] 
    for y in x['Categories']: 
     category = y['Category'] 
     if isinstance(category, dict): 
      category = [category] 
     for z in category: 
      ... 

xyzは、コードを読む人のために非常に有用ではありませんあなたは、一般的に、より説明的な変数名を使用して検討する必要があります。)私は数週間前にそれのための小さなライブラリを書いたことを頻繁に十分なJSON構造... ...

nested key retriever (nkr)

は、発電機を試してみて、それゾルどうかを確認しますあなたの問題を抱えています。

for x in products: 
    if product_id_searching_for in list(nkr.find_nested_key_values(x, 'CategoryID')): 
     productsInCategory.append(x) 
+1

例がいいですね。それがより商業的なものになるまで。 – tuergeist

+0

無料製品のコマーシャルは、魅力的ですが、おそらく時間/労力の無駄です。私は前にこの問題を抱えていた、私はそれを自分で解決した。そのコードがOPに役立つなら、私は助けてうれしいです – Lost

+0

しかし、そのノートでは、OP – Lost

関連する問題