Это моя версия одного лайнера, не нуждающегося в 2.6:
x1 = {0:2, 2:1, 3:(1, 2), 20:3}
x2 = {0:2, 2:1, 3:(1, 5), 20:3}
print max(max(values) if hasattr(values,'__iter__') else values for values in x1.values())
print max(max(values) if hasattr(values,'__iter__') else values for values in x2.values())
Вывод:
3
5
ОДНАКО Я настоятельно рекомендую перейти к началу этихзначения и измените хранение целых чисел на одноэлементных кортежей . Затем вы можете использовать более чистый код:
x1 = {0:(2,), 2:(1,), 3:(1, 2), 20:(3,)}
x2 = {0:(2,), 2:(1,), 3:(1, 5), 20:(3,)}
for x in (x1,x2):
print max(max(values) for values in x.values())