Как объединить два словаря с одинаковым значением

После некоторой обработки текстов получаю такой список словарей:

[{'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]}
→ Ссылка