python-check multi-level-dict-Schlüssel Existenz

SO viele Beiträge zeigen, wie Sie effizient, überprüfen Sie die Existenz eines Schlüssels in einem Wörterbuch, z.B., Prüfen Sie, ob ein bestimmter Schlüssel bereits in einem Wörterbuch vorhanden ist

Wie mache ich dies für eine multi-level-Taste? Zum Beispiel, wenn d["a"]["b"] ist ein dict, wie kann ich überprüfen, ob d["a"]["b"]["c"]["d"] vorhanden ist, ohne dabei etwas abscheuliches wie diese:

if "a" in d and isInstance(d["a"], dict) and "b" in d["a"] and isInstance(d["a"]["b"], dict) and ...

Gibt es eine syntax, wie

if "a"/"b"/"c"/"d" in d

Was ich eigentlich mit diesem für Sie: wir haben jsons, analysiert in dicts mit simplejson, dass ich brauche, um zu extrahieren Werte aus. Einige dieser Werte sind verschachtelte drei und vier Ebenen tief; aber manchmal ist der Wert existiert überhaupt nicht. Also ich wollte so etwas wie:

val = None if not d["a"]["b"]["c"]["d"] else  d["a"]["b"]["c"]["d"] #here d["a"]["b"] may not even exist

EDIT: lieber nicht zum Absturz zu bringen, wenn einige Unterschlüssel vorhanden ist, aber ist nicht ein Wörterbuch, e.g d["a"]["b"] = 5.

  • Dies ist nicht ein Basis-feature der Sprache, da es keine Möglichkeit zum hinzufügen neuer syntax. Definieren Sie eine neue Klasse überschreibt die enthält - Funktion, die aufgerufen wird, durch die "x in y" Ausdruck. Wollen Sie die Effizienz der syntax oder der Ausführung? Sie können nicht die gleiche Sache.
  • Naja, mein Ziel war es, effiziente syntax, aber dies war unter der Annahme, dass der O(1) dictionary-lookup-Zeit bewahrt bleibt. Ich merke jedoch, dass das auslösen von Ausnahmen ist teuer, also vielleicht ist das komplizierter als einfach nur seine Schlüssel Existenz.
  • Exception-handling ist nicht das teure Teil. Was wollen Sie grundsätzlich nicht in der Sprache als utdemir hingewiesen. Meitham die Antwort ist so nah wie Sie bekommen, was Sie wollen, ohne zu tun viel mehr Arbeit, die Definition einer Klasse, wie ich bereits erwähnt, und dann gehen durch die Mühe machen simplejson entpacken Objekte in die und nicht Vanille-Wörterbücher.
InformationsquelleAutor Tommy | 2014-11-17
Schreibe einen Kommentar