Я пытаюсь придумать код для решения этой проблемы в python. Таким образом, у меня есть следующий объект, в котором я пытаюсь объединить ключ links
только , если все остальные ключи-> значения равны if site name & id, metadata (id, title, url, desc) are equal
. обратите внимание, что структура всегда последовательна.
{
"websites": [
{
"output": {
"site": {
"id": 1,
"name": "microsoft"
},
"metadata": [
{
"id": 1,
"title": "microsoft Demo site",
"links": "[{'links': [{'resource': ['google', 'twitter', 'facebook'], 'link_status': '1', 'updated': '1'}, {'resource': ['linkedin', 'box', 'microsoft'], 'link_status': '0', 'updated': '1'}]}]",
"url": "https://example.com",
"desc": "description goes here"
},
{
"id": 1,
"title": "microsoft Demo site",
"links": "[{'links': [{'resource': ['google', 'twitter', 'facebook'], 'link_status': '1', 'updated': '1'}, {'resource': ['youtube', 'wikipedia', 'yahoo'], 'link_status': '0', 'updated': '0'}, {'resource': ['linkedin', 'box', 'microsoft'], 'link_status': '0', 'updated': '1'}]}]",
"url": "https://example.com",
"desc": "description goes here"
}
]
}
},
{
"output": {
"site": {
"id": 1,
"name": "Google"
},
"metadata": [
{
"id": 1,
"title": "google Demo site",
"links": "[{'links': [{'resource': ['amazon', 'twitter', 'facebook'], 'link_status': '1', 'updated': '1'}]}]",
"url": "https://example.com",
"desc": "description goes here"
}
]
}
}
]
}
В приведенном выше примере я ожидаю следующий вывод:
{
"websites": [
{
"output": {
"site": {
"id": 1,
"name": "microsoft"
},
"metadata": [
{
"id": 1,
"title": "microsoft Demo site",
"links": "[{'links': [{'resource': ['google', 'twitter', 'facebook'], 'link_status': '1', 'updated': '1'}, {'resource': ['linkedin', 'box', 'microsoft'], 'link_status': '0', 'updated': '1'},{'resource': ['youtube', 'wikipedia', 'yahoo'], 'link_status': '0', 'updated': '0'}, {'resource': ['linkedin', 'box', 'microsoft'], 'link_status': '0', 'updated': '1'}]}]",
"url": "https://example.com",
"desc": "description goes here"
}
]
}
},
{
"output": {
"site": {
"id": 1,
"name": "Google"
},
"metadata": [
{
"id": 1,
"title": "google Demo site",
"links": "[{'links': [{'resource': ['amazon', 'twitter', 'facebook'], 'link_status': '1', 'updated': '1'}]}]",
"url": "https://example.com",
"desc": "description goes here"
}
]
}
}
]
}
Этот код объединяет объекты на основе имени веб-сайта, но не выполняет вышеуказанное.
x_list = [[parent, list(child)] for parent, child in itertools.groupby(sorted(website_list, key=lambda x: x['name']), key=lambda x: x['name'])]
results = [{'name': parent, 'metadata': [c for j in child for c in j['metadata']]} for parent, child in x_list]
final_result = [{**i, 'metadata': [c for website_list, c in enumerate(i['metadata']) if all(parent != c for parent in i['metadata'][:website_list])]} for i in results]
return final_result