Come indicato da Zagorulkin Dmitry, non è necessario passare un lambda alla funzione di smistamento. Il comportamento predefinito della funzione di ordinamento è quello di agire sulle chiavi.
steps = {1:"val1", 5:"val2", 2:"val3"}
for key in sorted(steps):
print steps[key]
...
val1
val3
val2
Tuttavia, passando il lambda alla funzione di ordinamento non è un migliore funzionamento del piccolo beneficio (cioè un 'eccessivo'), ma in realtà è indesiderato. Rende il codice meno leggibile e anche più lento, in particolare se lo si applica a dizionari molto grandi o si effettua la chiamata più volte. Oltre a rendere l'obiettivo di ordinamento più esplicito rispetto alle coppie (chiave, valore), non vi è alcun vantaggio nell'utilizzarlo. I seguenti tempi mostrano il colpo di performance che ottieni quando si specifica un lambda.
steps = {randint(0, 100000): randint(0, 100000) for _ in range(100000) } # random dict
%%timeit
sort_list = [value for _, value in sorted(steps.items(), key=lambda item: item[0])]
1 loops, best of 3: 241 ms per loop
%%timeit
sort_list = [steps[k] for k in sorted(steps, key=lambda k: k)]
1 loops, best of 3: 196 ms per loop
%%timeit
sort_list = [ steps[key] for key in sorted(steps) ]
10 loops, best of 3: 106 ms per loop
che ha funzionato, grazie – user984003
Cosa succede se la chiave è una stringa, ma ho bisogno di ordinarla come int? – user984003
'sorted (steps)' è migliore di 'sorted (steps.keys())' – jamylak