@rsytrade

Как рекурсивно обойти словарь в python?

Помогите с рекурсией, пока изучаю не вник...
Есть список словарей [products], в каждом словаре есть вложенный список [products], который в свою очередь так же имеет (а может и не имеет вложенный список [products]).
Необходимо вывести на печать название каждого элемента текущего [products] и родительского [products]. Если в циклах, это примерно выглядит так:

for prod in products:
    if len(prod['products']) == 0:
        print(main_name['name'])
    else:
        for y in prod['products']:
            if len(y['products']) == 0:
                print(main_name['name'], y['name'])
            else:
                for x in y['products']:
                    if len(x['products']) == 0:
                        print(y['name'], x['name'])
                    else:
                        for w in x['products']:
                            if len(w['products']) == 0:
                                print(y['name'], w['name'])
                             else ...

Уровень вложенности ['products'] не известен, как оформить это в виде рекурсии?
я пробую:
def search_prod(obj):
    if len(obj['products']) == 0:
        return obj['name']
    for y in obj['products']:
        search_prod(y)

for i in products:
    print(search_prod(i))


Но получают None (кроме случаев когда в первом вхождении len(prod['products']) == 0)
  • Вопрос задан
  • 2682 просмотра
Решения вопроса 1
@twistfire92
Python backend developer
def recursion(products, parent_name):
	for product in products:
		name = product['name']
		print(f'Текущий - {name}, Родитель - {parent_name}')
		sub_products = product.get('products', [])
		if sub_products:
			recursion(sub_products, name)

recursion(products, 'root')


products - твой список со словарями, name - это как будет называться твой список, в примере я указал 'root', типа корневой элемент.

Поиграйся с этим кодом
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы