officialandrey
@officialandrey

Как организовать поиск по словарю Python?

Здравствуйте. Подскажите пожалуйста как организовать поиск по вложенным словарям в словарь в Python?

Например:
dict
{'name': "Риск", 
 'edges': [{'name': 'Доход=0-15000', 
            'df': 'Высокий'
            'edges': [],
            
            {'name': 'Доход=15000-30000', 
             'edges': [{'name': 'Кредитная_история=Неизвестно', 
                        'df': 'Средний'
                        'edges': [{'name': 'Долг=Высокий', 
                                   'df': 'Высокий',
                                   'edges': []
                                   
                                   {'name': 'Долг=Низкий', 
                                    'df': 'Средний',
                                    'edges': []
                                 }],                                           
                       {'name': 'Кредитная_история=Плохая',
                        'df': 'Высокий',
                        'edges': []
                       }, 
                                   
                       {'name': 'Кредитная_история=Хорошая', 
                        'df': 'Средний',
                        'edges': []
                       }]
            }, 
                                  
            {'name': 'Доход=35000+',
             'df': 'Низкий',
             'edges': [{'name': 'Кредитная_история=Неизвестно',
                        'df': 'Средний',
                        'edges': []
                       }, 
                       {'name': 'Кредитная_история=Плохая', 
                        'df': 'Высокий',
                        'edges': [], 
                       }, 
                       {'name': 'Кредитная_история=Хорошая', 
                        'df': 'Низкий',
                        'edges': []
                       }]
        }]
}


Если представить, то можно увидеть структуру дерева.
Если считать данный словарь деревом, то необходимо обойти дерево и найти нужный листочек.
Например:
вывести ячейку df если "Доход=15000-30000" и "Кредитная_история=Неизвестно" и "Долг=Высокий"

if "Доход=15000-30000" and "Кредитная_история=Неизвестно" and "Долг=Высокий":
   print(dict["df"])

Я пробовал реализовать через рекурсию, но ничего не получилось.
Заранее спасибо.
  • Вопрос задан
  • 1031 просмотр
Решения вопроса 1
officialandrey
@officialandrey Автор вопроса
Решил уже сам. Если кому-то пригодится, вот:
new_data = list()         
for i in range(len(data["Долг"])):
    temp = list()
    for key,_ in data.items():
        temp.append(key+"="+data[key][i])
        pass
    new_data.append(temp.copy())

def bypass(tree, find):
    arr = tree
    for e in arr['edges']:
        for p in find:
            if e['name'] == p:
                find.remove(p)
                arr = e
                if len(e['edges']) == 0:
                    print(e["df"]['Риск'].iloc[-1])
                else:
                    bypass(arr, find)

for i in new_data:
    bypass(Tree, i)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@zexer
Выглядит так, что одинаковой природы объекты почему-то вложены друг в друга. Их точно нельзя сделать более плоским одноуровневым словарем или списком словарей?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы