2017-09-21 14 views
0

私はJSON構造化データをとり、outputと呼ばれるPython dictに格納しています。私は通常、値を見つけるのに.get('value')を使用することができます。しかし、私が明確にしていないのは、常に入力されていないリストの一部の中で.get()を使用する方法です。リストの理解をPython Dict

マイ出力:私はこの場合razorpool、およびオブジェクトでPetに、すべてのvalueを保存するステートメントを記述しようとしている

{ 
    "entities": [ 
     { 
      "end": 3, 
      "entity": "pet", 
      "extractor": "ner_crf", 
      "processors": [ 
       "ner_synonyms" 
      ], 
      "start": 0, 
      "value": "Pet" 
     }, 
     { 
      "end": 8, 
      "entity": "aquatic_facility", 
      "extractor": "ner_crf", 
      "start": 4, 
      "value": "pool" 
     }, 
     { 
      "end": 14, 
      "entity": "toiletries", 
      "extractor": "ner_crf", 
      "start": 9, 
      "value": "razor" 
     } 
    ], 
    "intent": { 
     "confidence": 0.9765, 
     "name": "test_intent" 
} 
} 

entitiesに入力されていない可能性もあります。intentのみです。

{ 
    "entities": [], 
    "intent": { 
     "confidence": 0.9765, 
     "name": "test_intent" 
    } 
} 

これにアプローチする最良の方法は何ですか?:出力は単純にできた場合には

obj = [v["value"] for v in dct.get("entities",[])] 
print(obj) 

上記の行を返します:comprehension listなどなど、あなたが望むものを私が正しく理解している場合

答えて

2

は、その辞書からオブジェクトにすべての値を抽出することで、それは同じくらい簡単になるだろう「エンティティ」キーが辞書に存在しない場合の空のリスト。

['Pet', 'pool', 'razor'] 
0

値が各エンティティ辞書にあることが保証されていない場合は、次を使用できます。

output = { 
    "entities": [ 
     { 
      "end": 3, 
      "entity": "pet", 
      "extractor": "ner_crf", 
      "processors": [ 
       "ner_synonyms" 
      ], 
      "start": 0, 
      "value": "Pet" 
     }, 
     { 
      "end": 8, 
      "entity": "aquatic_facility", 
      "extractor": "ner_crf", 
      "start": 4, 
      "value": "pool" 
     }, 
     { 
      "end": 14, 
      "entity": "toiletries", 
      "extractor": "ner_crf", 
      "start": 9, 
      "value": "razor" 
     }, 
     { 
      "end": 14, 
      "entity": "toiletries", 
      "extractor": "ner_crf", 
      "start": 9, 
     } 
], 
    "intent": { 
     "confidence": 0.9765, 
     "name": "test_intent" 
    } 
} 


values = [a.get('value') for a in output.get('entities', []) if 'value' in a] 

print(values)