Я написал это немного по-другому:
x={'a':[1.05600000001,2.34581736481,[8.1111111112,9.999990111111]],
'b':[3.05600000001,4.34581736481,[5.1111111112,6.999990111111]]}
def recursive_rounding(keys, values):
to_return = {}
for key, value in zip(keys, values):
print key, value
if isinstance(value, dict):
rounded_value = recursive_rounding(value.keys(), value.values())
elif isinstance(value, (tuple, list)):
rounded_value = [round_by_type(x) for x in value]
else:
rounded_value = round_by_type(value)
print key, value
to_return[round_by_type(key)] = rounded_value
return to_return
def round_by_type(to_round):
if isinstance(to_round, (int, float)):
return round(to_round, 2)
elif isinstance(to_round, (list, tuple)):
return [round_by_type(x) for x in to_round]
return to_round
recursive_rounding(x.keys(), x.values())
Я написал это очень быстро, его можно немного почистить и улучшить, но просто чтобы показать, как вы можете подойти к нему с другой точки зрения
ВЫХОД IS:
# Result: {'a': [1.06, 2.35, [8.11, 10.0]], 'b': [3.06, 4.35, [5.11, 7.0]]} #