やりたいこと
ネスト化された辞書の値(Value,ただし数値のみ)の合計を計算したい.なお,事前にネストの深さがわかっていないとする.
たとえば以下のような辞書x
を考える.
x = {'a': 1.1,
'b': {
'c': [1, 1],
'd': {
'e': (1, 1),
'f': {
'g': 'foo'
}
}
}}
この場合の合計は5.1
になる.
方法
再帰関数を使う.
def f(x):
y = 0
if isinstance(x, int) or isinstance(x, float):
y += x
elif isinstance(x, tuple) or isinstance(x, list):
for _x in x:
y += f(_x)
elif isinstance(x, dict):
for v in x.values():
y += f(v)
else:
pass
return y
assert f(x) == 5.1 # OK
感想
再帰関数最近使ってなかったので完全に忘れていた