Как объединить два словаря с одинаковым значением
После некоторой обработки текстов получаю такой список словарей:
[{'word': 'житель', 'count': 2, 'id': [1, 3]}, {'word': 'житель', 'count': 1, 'id': [2]}, {'word': 'зачинщик', 'count': 1, 'id': [0]}]
Необходимо объединить объединять только те словари, в которых "word" одинаковые чтобы получить следующий вид:
[{'word': 'житель', 'count': 3, 'id': [1, 2, 3]}, {'word': 'зачинщик', 'count': 1, 'id': [0]}]
Пыталась использовать такой код:
for i in range(0, len(a)-1):
if a[i]["word"] == a[i+1]["word"]:
a[i]["count"] = a[i]["count"] + a[i+1]["count"]
a[i]["id"] = a[i]["id"] + a[i+1]["id"]
a[i+1].clear
print(a)
Но второй словарь не удаляется.
Есть ли более короткая форма выполнения данных операций?
Ответы (2 шт):
Автор решения: Zhihar
→ Ссылка
такой код устроит?
data = [{'word': 'житель', 'count': 2, 'id': [1, 3]}, {'word': 'житель', 'count': 1, 'id': [2]}, {'word': 'животное', 'count': 1, 'id': [111]}]
res = dict()
for obj in data:
if obj['word'] not in res:
res[obj['word']] = obj
else:
res[obj['word']]['count'] += obj['count']
res[obj['word']]['id'] += obj['id']
print(res)
он также позволяет анализировать когда word разные, или нужно и по другим ключам независимо соединять записи?
P.S.
поле id получается неотсортированное, если требуется сортировка, то можно далать
if obj['word'] not in res:
res[obj['word']] = obj
else:
res[obj['word']]['count'] += obj['count']
res[obj['word']]['id'] += obj['id']
res[obj['word']]['id'].sort()
Автор решения: strawdog
→ Ссылка
l = [{'word': 'житель', 'count': 2, 'id': [1, 3]}, {'word': 'житель', 'count': 1, 'id': [2]}]
res ={x:(l[0][x]+l[1].get(x) if (type(l[0][x]) != str) else l[0][x]) for x in l[0].keys()}
res:
{'word': 'житель', 'count': 3, 'id': [1, 3, 2]}