Одним из решений является использование collections.defaultdict
из стандартной библиотеки.
Идея состоит в том, чтобы установить ключи словаря в виде кортежа первых двух элементов и увеличить его на третий. Затем агрегируйте ключи и значения с помощью словарного понимания.
first = [[1,1,5],[2,3,7],[3,5,2],[4,4,6]]
second = [[1,1,3],[4,2,4],[2,3,2]]
from collections import defaultdict
from itertools import chain
d = defaultdict(int)
for i, j, k in chain(first, second):
d[(i, j)] += k
res = [[*k, v] for k, v in d.items()]
print(res)
[[1, 1, 8], [2, 3, 9], [3, 5, 2], [4, 4, 6], [4, 2, 4]]
Вот эквивалентное решение без использования каких-либо библиотек, использующее dict.setdefault
:
d = {}
for i, j, k in first+second:
d.setdefault((i, j), 0)
d[(i, j)] += k
res = [[*k, v] for k, v in d.items()]