научиться создавать ключ сортировки, который возвращает кортеж (см. Сортировка словаря с пользовательской функцией сортировки ):
d = {
'5.000': 'Y2A7',
'4.000': 'Y2A5',
'3.000': 'Y2A3',
'2.002': 'Y2A6',
'2.001': 'Y2A4',
'2.000': 'Y2A2',
'1.000': 'Y2A1'
}
result = sorted(d , key = lambda x : (-int(float(x)),float(x)))
print(result)
ключи теперь отсортированы правильно:
['5.000', '4.000', '3.000', '2.000', '2.001', '2.002', '1.000']
(-int(float(x)),float(x))
возвращает значение, противоположное целочисленному значению ключа (в виде числа с плавающей точкой) в качестве первого элемента кортежа, а в качестве прерывателя связей - только значение с плавающей точкой. Поэтому, когда целочисленное значение совпадает, прерыватель связей локально меняет сортировку.
Теперь выполните итерацию, используя отсортированные ключи для получения отсортированных словарных данных, или выполните прямую сортировку d.items()
:
sorted(d.items(), key = lambda x : (-int(float(x[0])),float(x[0])))