Попробуйте использовать collections.Counter
, чтобы объединить счетчики между обоими парными словарями, созданными из zip
:
from collections import Counter
l1 = [{'A': 5, 'B': 10, 'C': 15}, {'A': 5, 'B': 25, 'C': 17, 'D': 30, }]
l2 = [{'A': 5, 'G': 10, 'Q': 15}, {'A': 5, 'B': 25, 'M': 17, 'T': 30, }]
result = [Counter(x) + Counter(y) for x, y in zip(l1, l2)]
print(result)
Выход:
[Counter({'C': 15, 'Q': 15, 'A': 10, 'B': 10, 'G': 10}), Counter({'B': 50, 'D': 30, 'T': 30, 'C': 17, 'M': 17, 'A': 10})]
Counter
является подклассом dict
, поэтому вы можете рассматривать его как обычный словарь. Вы можете привести его к dict
, если хотите, чтобы ваш результат выглядел как [{'A': 10, 'B': 10, 'C': 15, 'G': 10, 'Q': 15}, {'A': 10, 'B': 50, 'C': 17, 'D': 30, 'M': 17, 'T': 30}]
.
Почему вышеприведенное работает из документов :
Несколько математических операций предоставлено для объединения объектов Counter для создания мультимножеств (счетчиков, число которых больше нуля). Сложение и вычитание объединяют счетчики путем сложения или вычитания количества соответствующих элементов. Пересечение и объединение возвращают минимум и максимум соответствующих отсчетов. Каждая операция может принимать входные данные со счетным числом, но выходные данные исключают результаты с нулевым или меньшим числом.