2017-01-04 2 views
0
{"type":{"value":221,"Name":"Grey"},"value":"40.6"}, 
{"type":{"value":222,"Name":"Orange"},"value":"40.2"}, 
{"type":{"value":223,"Name":"Purple"},"value":"12.2"}, 

Was ist der sauberste Weg, um die Außenseite „Wert“ von "40.2" wenn "Name" == "Orange" aus diesem JSON Dictionary zugreifen?sauberste Weg, um diesen JSON Wert in Python zugreifen

ich es geschafft, dies durch Iterieren zu erreichen, aber es wurde chaotisch, so dass alle Ideen, wie einen externen Wert auf einen Wert innerhalb der inneren geschweiften Klammern

+3

_Was ist der sauberste Weg zu ..._ Was haben Sie bisher versucht? Code anzeigen –

+0

Dies ist eine Liste von Dicts, also 'json_data [1] [" value "]' sollte es tun –

+0

Es gibt keinen anderen Weg außer Iteration Ich habe Angst – Saksow

Antwort

0

extrahieren Diese Antwort auf Patrick Haugh des basiert. Wenn es nur eine „Orange“ in der Liste enthalten ist, können Sie es auf diese Weise tun:

data = [ 
    {"type": {"value": 221, "Name": "Grey"}, "value": "40.6"}, 
    {"type": {"value": 222, "Name": "Orange"}, "value": "40.2"}, 
    {"type": {"value": 223, "Name": "Purple"}, "value": "12.2"} 
] 
print next((x['value'] for x in data if x['type']['Name'] == 'Orange'), 'not found') 

Ausgang:

40.2 

Der Ausdruck (x['value'] for x in data if x['type']['Name'] == 'Orange') ist die gleiche wie in Patrick Lösung, aber es ist ein Generatorausdruck anstelle eines Listenverständnisses. Der Unterschied besteht darin, dass der Generatorausdruck effizienter ist: Er wird aufhören zu finden, sobald das Ziel gefunden wird, während das Listenverständnis bis zum Ende der Liste weiter suchen wird.

Die next Funktion nimmt den obigen Ausdruck, erhalten Sie das nächste Element. Wenn "Orange" nicht in der Liste gefunden wird, wird der zweite Parameter zurückgegeben, nämlich die Zeichenfolge 'not found'.

+0

schöne Lösung danke – fbstats

3

Ich gehe davon aus Sie eine Liste der Wörterbücher basiert nehmen

l = [{"type":{"value":221,"Name":"Grey"},"value":"40.6"}, 
    {"type":{"value":222,"Name":"Orange"},"value":"40.2"}, 
    {"type":{"value":223,"Name":"Purple"},"value":"12.2"}] 

Nehmen wir an, dass viele Namen Orange sein können. Wir werden eine Liste Verständnis verwenden, um dies der Wörterbücher auf eine Liste zu reduzieren, die 'Name': 'Orange' den Wert von jenen

values = [d['value'] for d in l if d['type']['Name'] == 'Orange'] 
+0

Vielen Dank für den Vorschlag, aber nur 1 Name kann 'Orange' innerhalb der geben Wörterbuch, so suche ich nach einer Möglichkeit, den äußeren "Wert" zugreifen, wenn die Innenseite "Name" == " Orange " – fbstats

+0

@fbstats In diesem Fall verwenden Sie nicht wirklich die richtige Datenstruktur. Wenn Sie schnell Werte basierend auf eindeutigen Schlüsseln finden möchten, sollten Sie ein Wörterbuch verwenden. Es ist ziemlich einfach, Ihre Liste von Wörterbüchern in ein Wörterbuch zu bringen, das die 'Namensattribute 'dieser Wörterbücher auf sich selbst abbildet. 'dict_of_dict = {d ['type'] ['Name']: d für d in l}' –

Verwandte Themen