Как я могу получить доступ к значению во вложенном словаре с помощью одного ключа?

#python #dictionary #nested #pickle

Вопрос:

Предполагая, что у меня есть вложенный словарь, извлеченный из файла pickle, который содержит различные уровни, я хотел бы получить значение, указав только последний ключ. Ключи уникальны, учитывая собственную «ветвь».

Основная проблема в том, что у меня несколько ключей и уровней:

  dict = {
    
    'A': {
        
        'X': {
            1: [...],
            2: [...]
        },
        
        'Y': {
            3: [...],
            4: [...]
        }
    }
    
    'B': {
        
        'G': {
            
            'H': {
                
                'Z': [...]
            }
        }
    }
    
    'C': [...]
 
 }
 

Как я могу это сделать?

Комментарии:

1. Можете ли вы добавить пример словаря

2. en.wikipedia.org/wiki/Tree_traversal . Если ваш ключ не уникален, вы должны сообщить нам, какие значения вы хотите.

3. Почему вы сняли флаг принятого ответа? Что-то не так с моим решением?

4. Да, проблема в том, что это не работает, если у нас несколько ключей и уровней

5. Во-первых, у вашего словаря есть проблемы с синтаксисом. Во-вторых, я все еще понятия не имею, что вы ищете. Можете ли вы просто добавить пример, после которого вы ищете ключ / как выглядит ожидаемый результат? В словаре нет «ветвей», в нем есть ключи и значения.

Ответ №1:

простым решением была бы функция recusrive, которая работает даже для вложенных, вложенных словарей

 outer_dict = {'outer': {'inner': 10, 'even_inner': {'innerst': 25}}}
 

и функция:

 def get_val(search_dict, key):
    """ recursive searching the dict """
    for elem in search_dict:
        if elem == key:
            return search_dict[elem]
        if isinstance(search_dict[elem], dict):
            retval = get_val(search_dict[elem], key)
            if retval is not None:
                return retval
 
 value = get_val(outer_dict, 'innerst')
print(value)
>> 25
 

Проблемы:
если ключ не уникален, вы получите только первое совпадение. Вам понадобится список для заполнения значений, если ключ может быть там более одного раза.

Пожалуйста, приведите пример в следующий раз!

Комментарии:

1. К сожалению, это работает только при наличии единственного ключа. Как я могу это исправить? Вы можете увидеть пример в описании

2. Я отредактировал, чтобы работать более чем с одним ключом. Но это решение по-прежнему работает только для уникальных ключей, вам придется заполнить список, если это не предназначено для использования.

3. Ключи уникальны. Ваше новое решение работает, большое вам спасибо!