Мне нужна помощь в объединении некоторых словарей на основе объекта в списке словарей. Возможно ли это?
Мои данные:
mongo_data = [{
'url': 'https://goodreads.com/',
'variables': [{'key': 'Harry Potter', 'value': '10.0'},
{'key': 'Discovery of Witches', 'value': '8.5'},],
'vendor': 'Fantasy'
},{
'url': 'https://goodreads.com/',
'variables': [{'key': 'Hunger Games', 'value': '10.0'},
{'key': 'Maze Runner', 'value': '5.5'},],
'vendor': 'Dystopia'
},{
'url': 'https://kindle.com/',
'variables': [{'key': 'Twilight', 'value': '5.9'},
{'key': 'Lord of the Rings', 'value': '9.0'},],
'vendor': 'Fantasy'
},{
'url': 'https://kindle.com/',
'variables': [{'key': 'The Handmaids Tale', 'value': '10.0'},
{'key': 'Divergent', 'value': '9.0'},],
'vendor': 'Fantasy'
}]
Мой код:
Я использовал [groupby
] для группировки элементов с одинаковым URL.
from itertools import groupby, chain
import json
searches = []
for key, group in groupby(mongo_data, key=lambda chunk: chunk['url']):
search = {}
search["url"] = key
search["results"] = [{"genre": result["vendor"], "data": result["variables"]} for result in group]
searches.append(search)
print(json.dumps(searches))
Мой вывод
[
{
"url": "https://goodreads.com/",
"results": [
{
"genre": "Fantasy",
"data": [
{
"key": "Harry Potter",
"value": "10.0"
},
{
"key": "Discovery of Witches",
"value": "8.5"
}
]
},
{
"genre": "Dystopia",
"data": [
{
"key": "Hunger Games",
"value": "10.0"
},
{
"key": "Maze Runner",
"value": "5.5"
}
]
}
]
},
{
"url": "https://kindle.com/",
"results": [
{
"genre": "Fantasy",
"data": [
{
"key": "Twilight",
"value": "5.9"
},
{
"key": "Lord of the Rings",
"value": "9.0"
}
]
},
{
"genre": "Fantasy",
"data": [
{
"key": "The Handmaids Tale",
"value": "10.0"
},
{
"key": "Divergent",
"value": "9.0"
}
]
}
]
}
]
Как вы можете видеть под https://kindle.com/
, у меня есть "genre":"Fantasy"
дважды. Вместо этого печатаю дважды. Могу ли я объединить их без дубликатов.
Итак, я хочу, чтобы мой ожидаемый результат был:
{
"url": "https://kindle.com/",
"results": [
{
"genre": "Fantasy",
"data": [
{
"key": "Twilight",
"value": "5.9"
},
{
"key": "Lord of the Rings",
"value": "9.0"
},
{
"key": "The Handmaids Tale",
"value": "10.0"
},
{
"key": "Divergent",
"value": "9.0"
}
]
}
]
}
]
Возможно ли это?