Если в словаре ключи только строковые числа, можно сортировать просто по
int :
>>> d = {'1': 'x', '11': 'x1', '3': 'x2', '101': 'x8'}
# исходный
>>> sorted(d)
['1', '101', '11', '3']
# сортируем по int
>>> sorted(d, key=int)
['1', '3', '11', '101']
а если среди ключей будут буквы, тогда возникнет ошибка при конвертации
Если в словаре есть и обычные строковые ключи, можно сортировать по своей функции:
>>> d = {'zor': 5, 'ert': 5, 'd': 6, 'a': 8, 'zab': 9, '1': 'x', '11': 'x1', '3': 'x2', '101': 'x8'}
# исходный
>>> sorted(d)
['1', '101', '11', '3', 'a', 'd', 'ert', 'zab', 'zor']
# пишем функцию
>>> def d_sort(i):
return int(i) if i.isdigit() else False, i
# сортируем
>>> sorted(d, key=lambda x: d_sort(x))
['a', 'd', 'ert', 'zab', 'zor', '1', '3', '11', '101']
P.S. Ну и в конструкции
for k in sorted(d.keys())
явное обращение к ключам
.keys()
можно не делать, Python пройдет по ключам по умолчанию:
for k in sorted(d)