Одним из решений является использование рекурсивной функции для преобразования словаря в список кортежей, например:
(('A',), 'a', 'a1', 0.5), (('A',), 'a', 'a2', 0.2), (('A',), 'a', 'a3', 1.0), ...
, а затем сортировка этого списка кортежей:
def dict_to_list(input_dict):
for key, value in input_dict.items():
if isinstance(value, dict):
for nested_value in dict_to_list(value):
yield (key, ) + nested_value
else:
yield (key, value)
print(sorted(dict_to_list(df), key=lambda value: value[-1]))
>>> [(('A',), 'a', 'a2', 0.2), (('B',), 'b2', 0.4), (('A',), 'a', 'a1', 0.5), (('B',), 'b1', 0.8), (('A',), 'a', 'a3', 1.0)]