#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. Ключи уникальны. Ваше новое решение работает, большое вам спасибо!