高階関数の計算、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', {})