Сложение списка словарей
Есть два списка:
list_one = [{"name": "Alex", "value": 1}, {"name": "Bob", "value": 2}]
list_two = [{"name": "Alex", "value": 1}, {"name": "Bob", "value": 2}]
Нужно их сложить так что бы получился третий такого вида:
list_three = [{"name": "Alex", "value": 2}, {"name": "Bob", "value": 4}]
Первые два списка словарей всегда будут одинаковые по длине и словари будут отличатся только значением "value". То есть поле "name" первого словаря будет совпадать с полем "name" первого элемента второго словаря. Через цикл не совсем корректно это делать, так как словарей в списке может быть до тысячи.
Ответы (1 шт):
Вы, конечно, можете поизощряться с модулем collections, но мне кажется, что работа с табличным форматом будет и удобнее и быстрее:
import pandas as pd
list_one = [{"name": "Alex", "value": 1}, {"name": "Bob", "value": 2}]
list_two = [{"name": "Alex", "value": 1}, {"name": "Bob", "value": 2}]
res = pd.DataFrame(list_one+list_two).groupby("name", as_index=False).sum().to_dict("records")
print(res)
[{'name': 'Alex', 'value': 2}, {'name': 'Bob', 'value': 4}]
UPDATE:
Если нужно складывать значения по модулю (абсолютные), то делаем так:
res = pd.DataFrame(list_one+list_two).groupby("name", as_index=False)["value"].apply(lambda x:x.abs().sum()).to_dict("records")
UPDATE 2:
Для вычитания можно сделать так (принимая во внимание, что списков всего два):
res = pd.DataFrame(list_one+list_two).groupby("name", as_index=False)["value"].apply(lambda x:x.iloc[0] - x.iloc[-1]).to_dict("records")