Вы хотите reduce
, а не map
. map
создает последовательность, применяя функцию к каждому элементу данной последовательности, тогда как reduce
накапливает объект над последовательностью.
from functools import reduce
inp = [{1:100}, {3:200}, {8:300}]
dct = {}
reduce(lambda d1, d2: (d1.update(d2) or d1), inp, dct)
{1: 100, 3: 200, 8: 300}
Эта lambda
часть может показаться сложной. Это создает функцию, которая обновляет dict и возвращает сам словарь. Это связано с тем, что reduce
ожидает, что функция накопления вернет обновленный объект, а dict.update()
вернет None
. Поскольку None
интерпретируется как False, оператор or
возвращает вторую переменную, которая является обновленным словарем.
Этот трюк or
засчитывается @ kostya-goloveshko в этом потоке: Почему python dict.update () не возвращает объект?