2013-03-04 33 views
7

Aşağıdaki iç içe sözlüğe göre, her bir üst sözlük anahtarını 'value4ac' nasıl edinebilirim? 'value4ac' değerini başlatarak, 'key4', 'key4a', 'Key4ac''u almak istiyorum.İç içe geçmiş sözlükten ebeveyn anahtarlarını alın

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

Anahtar adın arkasında bir mantık var mı? Demek istediğim, '' key4ac '', '' keyd '' tarafından atıfta bulunulan 'dict' içinde olacağını biliyor musunuz? – Bakuriu

cevap

11

Kurtarma için özyineleme! nasıl çalıştığını

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') 

O

  • öğe bir sözlük değildir öğeleri ve kontroller 2 olguda bakar - bu değer ise Bu durumda, bkz biz Arıyorsun. Öyleyse, yalnızca anahtarı içeren bir liste döndür. (Bu bizim özveri için temel durumumuzdur).
  • ürün bir sözlüğün - Bu sözlüğündeki anahtarı aramayı deneyin. Bu sözlükte (veya herhangi bir alt dict) bulunursa, yolun geri kalanına önceden yerleştirilmiş olan doğru yolu alan anahtarı döndürün.
+0

by find find_key (d, anahtar): '' find find find find find_key (d, value): ', doğru mu? – zelusp

+0

@zelusp - Evet, o değişkenin adı ... Talihsiz. :-). Önerin için teşekkürler. – mgilson

İlgili konular