@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? Или лучше как-то по другому?
  • Вопрос задан
  • 130 просмотров
Решения вопроса 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)


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

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

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