@pcdesign

Как объединить структуру внутри структуры?

Вот такая структура:

[
	{
		"cat_name":"Распродажа",
		"sub_cats":[
			{
				"cat_name":"aaaaa",
				"goods_inside":[
					"00-00004044",
					"00000000325"
				]
			},
			{
				"cat_name":"bbbbbb",
				"goods_inside":[
					"00-00001816"
				]
			}
		]
	},
	{
		"cat_name":"aaaaa",
		"goods_inside":[
			"00-00003108"
		]
	},
	{
		"cat_name":"bbbbbb",
		"goods_inside":[
			"00-00001814",
			"00-00004288"
		]
	}
]


Как придти к вот такой:
[
	{
		"cat_name":"aaaaa",
		"goods_inside":[
			"00-00003108", "00-00004044", "00000000325"
		]
	},
	{
		"cat_name":"bbbbbb",
		"goods_inside":[
			"00-00001814", "00-00004288",  "00-00001816"
		]
	}
]


То есть то что находится в разделе "Распродажа" перекидываем в соответствующие подразделы, а саму "Распродажу" удаляем.
from collections import defaultdict? Или лучше как-то по другому?
  • Вопрос задан
  • 126 просмотров
Решения вопроса 2
aRegius
@aRegius
Python Enthusiast
Как вариант:
cat_goods_dict = defaultdict(list)

for d in data[0]['sub_cats'] + data[1:]:
	  cat_goods_dict[d['cat_name']] += d['goods_inside']

new_data = [
	  {'cat_name': cat_val, 'goods_inside': goods_val}
	  for cat_val, goods_val in cat_goods_dict.items()
]
Ответ написан
@pcdesign Автор вопроса
import itertools
struct_resale = struct.pop(0)

lst = []
for x, y in itertools.product(struct, struct_resale['sub_cats']):
    if x['cat_name'] == y['cat_name']:
        c = x.copy()
        c.update(y)
        c['goods_inside'] = x['goods_inside'] + y['goods_inside']
        lst.append(c)

print(lst)


Вроде как работает. Но не знаю, может есть вариант получше?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 130 000 ₽
deeplay Новосибирск
от 130 000 ₽
Enjoy PRO Санкт-Петербург
от 140 000 до 180 000 ₽
26 окт. 2020, в 11:50
10000 руб./за проект
26 окт. 2020, в 11:30
1200 руб./в час
26 окт. 2020, в 10:48
3000 руб./за проект