Как объединить массив объектов и удалить дубликаты по условию
Есть массив объектов
status_data = [
{
"id": "id_1",
"like": [
{
"status": "xx",
"sum": 70
}
],
},
{
"id": "id_2",
"like": [
{
"status": "xx",
"sum": 8
},
{
"status": "zz",
"sum": 4
}
]
}
]
Второй массив объектов
status_static = [
{
"status": "xx",
"sum": 0
},
{
"status": "zz",
"sum": 0
},
{
"status": "yy",
"sum": 0
}
]
Необходимый результат
result = [
{
"id": "id_1",
"like": [
{
"status": "xx",
"sum": 70
},
{
"status": "zz",
"sum": 0
},
{
"status": "yy",
"sum": 0
}
],
},
{
"id": "id_2",
"like": [
{
"status": "xx",
"sum": 0
},
{
"status": "yy",
"sum": 8
},
{
"status": "zz",
"sum": 4
}
]
}
]
Необходимо добавить объекты в массив like, не добавляя дубликаты (python)
Добавляю status_static в status_data
for index, i in enumerate(status_data):
for m in status_static:
status_data[index]['like'].append(m)
Удаляю дубликаты, но затираются заполненные (там где sum не равна 0)
for index, m in enumerate(status_data):
status_data[index]['like'] = list({v['status']: v for v in m['like']}.values())
Не правильный результат
result = [
{
"id": "id_1",
"like": [
{
"status": "xx",
"sum": 0
},
{
"status": "zz",
"sum": 0
},
{
"status": "yy",
"sum": 0
}
],
},
{
"id": "id_2",
"like": [
{
"status": "xx",
"sum": 0
},
{
"status": "yy",
"sum": 0
},
{
"status": "zz",
"sum": 0
}
]
}
]
Ответы (1 шт):
Автор решения: strawdog
→ Ссылка
Можно пройтись циклами по обеим переменным с проверкой на ключи:
for i, x in enumerate(status_data):
statuses = [y["status"] for y in x['like']]
for z in status_static:
if z["status"] not in statuses:
status_data[i]["like"].append(z)
status_data:
[{'id': 'id_1',
'like': [{'status': 'xx', 'sum': 70},
{'status': 'zz', 'sum': 0},
{'status': 'yy', 'sum': 0}]},
{'id': 'id_2',
'like': [{'status': 'xx', 'sum': 8},
{'status': 'zz', 'sum': 4},
{'status': 'yy', 'sum': 0}]}]