Вы можете отсортировать ключи по своему усмотрению, разделив их на '.' а затем преобразовать каждый из компонентов в целое число, например:
sorted(mydict.keys(), key=lambda a:map(int,a.split('.')))
, который возвращает это:
['0',
'1',
'2.0',
'2.1',
'3',
'4.0.0',
'4.0.1',
'5',
'10',
'11.0',
'11.1',
'12.0',
'12.1.0',
'12.1.1']
Вы можете перебирать этот список ключей и извлекать значения из своего словаря по мере необходимости.
Вы также можете отсортировать результат mydict.items (), очень похоже:
sorted(mydict.items(), key=lambda a:map(int,a[0].split('.')))
Это дает вам отсортированный список пар (ключ, значение), например:
[('0', 10),
('1', 23),
('2.0', 321),
('2.1', 3231),
('3', 3),
# ...
('12.1.1', 2)]