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}')
Выведет:
Пятёрочка :
* фрукты:
--- апельсин
--- банан
Магнит :
* овощи:
--- помидор