2016-05-03 5 views
0

Ich bin zu Python neu und ich möchte eine umgekehrte Suche eines Wörterbuchs machen. Ich habe ein Wörterbuch aus einer JSON-Datei erstellt, die dieser recht ähnlich sieht:Geben Sie das Wörterbuch zurück, das auf Werten basiert

{ 
    "dict1" : { 
     "data1" : "a", 
     "data2" : "b", 
     "data3" : "c", 
     "data4" : "d", 
     "data5" : "e" 
    }, 
    "dict2" : { 
     "data1" : "f", 
     "data2" : "g", 
     "data3" : "h", 
     "data4" : "i", 
     "data5" : "j" 
    } 

} 

Wenn ich das Wörterbuch wissen wollen, ‚dict1‘ oder ‚dict2‘, enthält den Wert j, vorausgesetzt, alle Werte eindeutig sind.

Antwort

1

Ein Wörterbuch von Wörterbüchern ist wirklich kein Problem, vorausgesetzt, Ihre Datenstruktur ist gut etabliert und Sie wissen, in welcher Tiefe Sie Dinge finden. Wenn die Struktur viel tiefer geht als Sie, wird es kompliziert. Eine einfache Lösung für Ihre Frage ist:

#!/usr/bin/env python3 

json_dict = { 
    "dict1": { 
     "data1": "a", 
     "data2": "b", 
     "data3": "c", 
     "data4": "d", 
     "data5": "e" 
    }, 
    "dict2": { 
     "data1": "f", 
     "data2": "g", 
     "data3": "h", 
     "data4": "i", 
     "data5": "j" 
    }, 
    "dict3": { 
     "data42": "c", 
     "data43": "g" 
    } 
} 


def which_dict_key(value, dicts): 
    ''' 
    Return a list of keys for a dictionary where the 
    value dictionary for that key includes the value 
    provided. 
    ''' 

    return [key for key in dicts if value in dicts[key].values()] 

if __name__ == '__main__': 
    print(which_dict_key("j", json_dict)) 
    print(which_dict_key("c", json_dict)) 
    print(which_dict_key("q", json_dict)) 
    print(which_dict_key("g", json_dict)) 

Welche produziert:

['dict2'] 
['dict1', 'dict3'] 
[] 
['dict3', 'dict2'] 
+0

Das funktioniert für mich. Ich begann zu denken, dass es unmöglich sei, weil ich denke, dass Wörterbücher nicht auf diese Weise verwendet werden sollten. Danke für den Beitrag. – Chad

2

Wenn mein JSON-Wissen fehlschlägt, sieht es so aus, als hätten Sie tatsächlich ein Diktat in einem Diktat? Eine einfache Möglichkeit, dieses Problem zu lösen, wäre, diese dict-Objekte in separate Variablen zu extrahieren, sagen wir, Sie extrahieren diese in "d1" und "d2".

können wir sehen, ob ein Wörterbuch in Python einen bestimmten Wert mit der folgenden Codezeile enthält:

"j" in d1.values() 

Dieses wahre zurück, wenn „j“ der Wert eines Schlüssels im Wörterbuch ist. Wenn Sie dies im Wörterbuch der obersten Ebene in Ihrem Beispiel tun, wird es nicht funktionieren. Sie müssen zusätzlichen Code schreiben, um rekursiv nach Wörterbüchern zu suchen, die einem Schlüssel innerhalb des Wörterbuchs der obersten Ebene zugeordnet sind.

So wird es einfacher, Ihre Wörterbücher in separate Variablen zu extrahieren, und rufen Sie dann die obige Codezeile in einer if-Anweisung, um festzustellen, ob der Wert innerhalb des Wörterbuchs ist. Sie müssen jedes Wörterbuch irgendwie verfolgen, diese Wörterbücher durchlaufen und speichern, ob jedes Wörterbuch Ihren Wert enthält.

+0

Huch. Das erscheint viel komplizierter, als ich anfangs dachte. Die JSON-Datei habe ich mit fileIO erstellt. Aber Sie haben Recht, es ist ein Wörterbuch von Wörterbüchern. Ich werde durcharbeiten, was du gepostet hast und dich wissen lassen. – Chad

+0

Lassen Sie mich wissen, wenn Sie andere Probleme haben – dahui

Verwandte Themen