Seite 1 von 1

aus dictionary filtern

Verfasst: Dienstag 13. Dezember 2016, 22:58
von Jan1292
Guten Abend zusammen,

bei meinem Projekt zur Emotionserkennung erhalte ich nach "Upload" meines Bildes folgendes dictionary als Response:

Code: Alles auswählen

{u'status': u'success', u'photos': [{u'url': u'http://api.skybiometry.com/fc/images/get?id=bmN2X3hybD0zbnEwM3M0cDhxMT0MThwOX0NjM1c3I0MW8zMDk5MiZuY3ZfZnJwZXJnPW9zODk2MXE4czAxNzQxMjlvNXA5cHJvN25yNDk5cDYyJmVxPTI3ODEmY3Z0cjZxc25uMXE2c3MmZ3Z6cmZnbnpjPTIwYxMjEzMTk1NTA4', u'width': 150, u'tags': [{u'eye_left': {u'y': 43.33, u'x': 60.0, u'confidence': 97, u'id': 449}, u'confirmed': False, u'recognizable': True, u'uids': [], u'mouth_center': {u'y': 65.33, u'x': 52.0, u'confidence': 89, u'id': 615}, u'similarities': None, u'yaw': 6, u'manual': False, u'height': 44.0, u'width': 44.0, u'points': None, u'nose': {u'y': 56.67, u'x': 49.33, u'confidence': 94, u'id': 403}, u'eye_right': {u'y': 44.67, u'x': 38.0, u'confidence': 97, u'id': 450}, u'pitch': -13, u'tid': u'TEMP_F@0c2cfc3770090a4e09462e67004a0052_14e6dfaa1d6ff_49.33_54.67_0_1', u'attributes': {u'mood': {u'confidence': 77, u'value': u'surprised'}, u'neutral_mood': {u'confidence': 21, u'value': u'false'}, u'face': {u'confidence': 70, u'value': u'true'}, u'sadness': {u'confidence': 0, u'value': u'false'}, u'disgust': {u'confidence': 10, u'value': u'false'}, u'anger': {u'confidence': 64, u'value': u'true'}, u'surprise': {u'confidence': 77, u'value': u'true'}, u'fear': {u'confidence': 0, u'value': u'false'}, u'happiness': {u'confidence': 53, u'value': u'true'}}, u'label': None, u'roll': -6, u'center': {u'y': 54.67, u'x': 49.33}}], u'pid': u'F@0c2cfc3770090a4e09462e677756223a_14e6dfaa1d6ff', u'height': 150}], u'operation_id': u'92af684c9b404321afe9010e9982badb', u'usage': {u'reset_time': 1481660595, u'used': 4, u'limit': 100, u'remaining': 96, u'reset_time_text': u'Tue, 13 December 2016 20:23:15 +0000'}}
Jetzt wäre es natürlich schön aus

Code: Alles auswählen

u'attributes': {u'mood': {u'confidence': 77, u'value': u'surprised'}
, was wir mir ja die Emotion mit der höchste Wahrscheinlichkeit ausgibt diese zu extrahieren, in diesem Fall also das "surprised".

Ich habe auch natürlich schon selber versucht das ganze irgendwie zu filtern, aber ich komm an diesen Wert nicht ran. Die keys des dictionary sind:

Code: Alles auswählen

[u'status', u'photos', u'usage', u'operation_id']
und die Emotion steckt ja in

Code: Alles auswählen

photos
, aber wie genau komm ich an ? Ist das eine Art Subkey, also wie ein mehrdimensionales Array? Ist das überhaupt so einfach, wie ich mir das gerade noch vorstelle?

Re: aus dictionary filtern

Verfasst: Dienstag 13. Dezember 2016, 23:25
von BlackJack
@Jan1292: Die Emotion steckt nicht *direkt* in dem Wert zum Schlüssel 'photos'. Dieser Wert ist eine Liste. Mit einem Element zu jedem Foto. Und diese Elemente sind wieder Wörterbücher, die haben Schlüssel und Werte. Unter anderem den Schlüssel 'tags'. Der hat als Wert eine Liste. Und da sind Wörterbücher drin. Mit Schlüsseln und Werten. Ein Schlüssel ist 'attributes' und der Wert dazu ist wieder ein Wörterbuch. Das hat Schlüssel und Werte. Unter anderem den Schlüssel 'mood', was wieder ein Wörterbuch als Wert ergibt. Wenn Du also weist wie man aus einem Wörterbuch den Wert zu einem Schlüssel ermittelt und auf Elemente einer Liste zugreifen kann, dann weisst Du auch wie man an das 'surprised' kommt. Du musst die einzelnen Operationen halt nacheinander anwenden um über die Zwischenergebnisse zum gewünschten Endergebnis zu kommen.

So etwas kann man übrigens prima in einer interaktiven Python-Shell ausprobieren.