Python дерево каталогов

Как сделать так, чтобы создать дерево категорий, типа магазин -> категория товаров -> продукт?

Допустим есть массив объектов:

[{“product”: “апельсин”, “category”: “фрукты”, “shop”: “Пятёрочка”},
 {“product”: “банан”, “category”: “фрукты”, “shop”: “Пятёрочка”},
 {“product”: “помидор”, “category”: “овощи”, “shop”: “Магнит”}]

Как из массива объектов сформировать такой список?

Должно получиться так:

  • Пятерочка
    • фрукты
      • Апельсин
      • Банан
  • Магнит
    • Овощи
      • Помидор

Но у меня получается

  • Пятерочка
    • фрукты
      • Апельсин
  • Пятерочка
    • фрукты
      • Апельсин
  • Магнит
    • Овощи
      • Помидор

Ответы (2 шт):

Автор решения: dllx

Пример

t = {"tre1":"firth"}
tree = {'tree':t}
print(tree)
/// {'tree': {'tre1': 'firth'}}

Или же использовать JSON

→ Ссылка
Автор решения: Алексей Белкин

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

lst_data = [{'product': 'апельсин',
             'category': 'фрукты',
             'shop': 'Пятёрочка'},
            {'product': 'банан',
             'category': 'фрукты',
             'shop': 'Пятёрочка'},
            {'product': 'помидор',
             'category': 'овощи',
             'shop': 'Магнит'}]


rezult_dict = {}
for data in lst_data:
    if data['shop'] not in rezult_dict:
        rezult_dict[data['shop']] = {
            data['category']: [data['product']]}
    else:
        if data['category'] not in rezult_dict[data['shop']]:
            rezult_dict[data['shop']][data['category']] = [data['product']]
        else:
            rezult_dict[data['shop']][data['category']].append(data['product'])

for shop in rezult_dict:
    print(shop, ':')
    for category in rezult_dict[shop]:
        print(f'* {category}:')
        for product in rezult_dict[shop][category]:
            print(f'--- {product}')

Выведет:

Пятёрочка :
* фрукты:
--- апельсин
--- банан
Магнит :
* овощи:
--- помидор
→ Ссылка