2017-09-21 3 views
0

Ich nehme JSON strukturierte Daten und Speichern in einem Python dict namens output Ich weiß, ich könnte normalerweise .get('value') verwenden, um den Wert zu finden. Was ich jedoch nicht weiß, ist, wie man .get() in einem Teil einer Liste verwendet, die nicht immer ausgefüllt ist.List Comprehension mit einem Python Dict

Meine Leistung:

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

Ich versuche, eine Erklärung zu schreiben, die alle value speichert, in diesem Fall razor, pool und Pet in einem Objekt. Es ist auch möglich, dass entities nicht ausgefüllt ist, nur intent.

In diesem Fall wird der Ausgang könnte einfach sein:

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

Was ist der beste Weg, um diesen Ansatz?

Antwort

2

Wenn ich es richtig verstanden habe, was Sie wollen, ist es, alle Werte in ein Objekt aus diesem Wörterbuch zu extrahieren, das wäre so einfach sein wie ein comprehension list wie:

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

Die oben genannten Linien zurückkehren eine leere Liste für den Fall, dass der Schlüssel "Entitäten" im Wörterbuch nicht vorhanden wäre. Sie erhalten:

0

Wenn der Wert nicht garantiert in jedem Entitätswörterbuch ist, können Sie Folgendes verwenden.

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) 
Verwandte Themen