2013-03-04 2 views
7

Из следующего вложенного словаря, как я могу получить каждый родительский ключ словаря 'value4ac'? Начав значение 'value4ac', я хочу получить 'key4', 'key4a', 'Key4ac'.Получить ключи от вложенного словаря

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

Есть ли логика позади имени ключа? Я имею в виду, знаете ли вы, что '' key4ac'' будет находиться в 'dict', на который ссылается« by4 »? – Bakuriu

ответ

11

Рекурсия на помощь!

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

, как это работает

Он просматривает предметы и чеки 2 случаев

  • элемента не является словарь - В этом случае, смотрите, если это значение, которое мы «Ищем. Если это так, верните список, содержащий только ключ. (Это наш базовый случай для рекурсии).
  • item - словарь - попробуйте найти ключ в этом словаре. Если он найден в этом словаре (или любом поддикторе), верните ключ, который берет правильный путь, предварительно наложенный на остальную часть пути.
+0

от 'def find_key (d, key):' вы имеете в виду 'def find_key (d, value):', correct? – zelusp

+0

@zelusp - Да, имя этой переменной было ... Несчастливо. :-). Спасибо за предложение. – mgilson

Смежные вопросы