reduce で dictionary を生成

高階関数の計算、reduce() の学習は腐るほどいろんなサイトで紹介されているので
集計によって求める sum 等はそれらを検索すれば良いでしょう。

reduce の initilizer に dictionary を指定して、リストを走査して 新しい dictionary を求めたい。

簡単な理解の為のコード

from functools import reduce

list = ['a','b','c']

def update_and_return(d, v):
    d.update({ v: v.upper() })
    return d
dict1 = reduce(lambda r, t: update_and_return(r, t), list, {})
# {'a':'A', 'b':'B', 'c':'C'}

これは、こう書ける

dict1 = reduce(update_and_return, list, {})

lambda 式は、複数行を書けないので、辞書を update で更新(追加)して
それを返すというものが書けない。
しかし、
Python3.5 から、辞書の内包表記で { **d1, **d2 } という書き方ができるので、

dict1 = reduce(lambda r,t:{**r, t:t.upper()}, list, {})

この list をもちろん、'abc' と書いてもいい。

dict1 = reduce(lambda r,t:{**r, t:t.upper()}, 'abc', {})