2013-03-04 15 views
7

Wie kann ich aus dem folgenden verschachtelten Wörterbuch alle übergeordneten Wörterbuchschlüssel von 'value4ac' abrufen? Indem ich den 'value4ac' Wert beginne, möchte ich 'key4', 'key4a', 'Key4ac' erhalten.Abrufen von Elternschlüsseln aus verschachtelten Wörterbüchern

example_dict = { 'key1' : 'value1', 
       'key2' : 'value2', 
       'key3' : { 'key3a': 'value3a' }, 
       'key4' : { 'key4a': { 
             'key4aa': 'value4aa', 
             'key4ab': 'value4ab', 
             'key4ac': 'value4ac' 
            }, 
          'key4b': 'value4b' 
          } 
        } 
+0

Gibt es eine Logik hinter dem Schlüsselnamen? Ich meine, weißt du, dass "key4ac" in dem "dict" steht, auf das "key4" verweist? – Bakuriu

Antwort

11

Rekursion zur Rettung!

example_dict = { 'key1' : 'value1', 
       'key2' : 'value2', 
       'key3' : { 'key3a': 'value3a' }, 
       'key4' : { 'key4a': { 'key4aa': 'value4aa', 
             'key4ab': 'value4ab', 
             'key4ac': 'value4ac'}, 
          'key4b': 'value4b'} 
       } 

def find_key(d, value): 
    for k,v in d.items(): 
     if isinstance(v, dict): 
      p = find_key(v, value) 
      if p: 
       return [k] + p 
     elif v == value: 
      return [k] 

print find_key(example_dict,'value4ac') 

, wie es funktioniert

Es Bestellung und Kontrollen sieht durch 2 Fälle

  • Artikel kein Wörterbuch ist - in diesem Fall sehen, ob es der Wert ist, dass wir Ich suche nach. Wenn dies der Fall ist, gebe eine Liste zurück, die nur den Schlüssel enthält. (Dies ist unser Grundfall für Rekursion).
  • item ist ein Wörterbuch - Versuchen Sie, nach dem Schlüssel in diesem Wörterbuch zu suchen. Wenn es in diesem Wörterbuch (oder einem beliebigen Unterdikt) gefunden wird, gebe den Schlüssel zurück, der den rechten Pfad vorausgehend auf den Rest des Pfades nimmt.
+0

von 'def find_key (d, key):' du meinst 'def find_key (d, value):', korrekt? – zelusp

+0

@zelusp - Ja, der Name dieser Variablen war ... bedauerlich. :-). Danke für den Vorschlag. – mgilson

Verwandte Themen