Wie von Zagorulkin Dmitry hingewiesen, sollten Sie nicht ein Lambda an die Sortierfunktion übergeben. Das Standardverhalten der Sortierfunktion besteht darin, auf die Schlüssel einzuwirken.
steps = {1:"val1", 5:"val2", 2:"val3"}
for key in sorted(steps):
print steps[key]
...
val1
val3
val2
ist jedoch das Lambda zur Sortierfunktion vorbei kein besserer Betrieb von kleinem Vorteile (das heißt ein ‚Overkill‘), aber es ist eigentlich unerwünscht. Es macht den Code weniger lesbar und es ist auch langsamer, besonders wenn Sie es auf sehr große Wörterbücher anwenden oder den Anruf mehrmals durchführen. Abgesehen davon, dass das Sortierziel in Bezug auf die Paare (Schlüssel, Wert) expliziter ist, hat es keinen Vorteil, es zu verwenden. Die folgenden Timings zeigen den Performance-Hit, den Sie bei der Angabe eines Lambda erhalten.
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
das hat funktioniert, danke – user984003
Was ist, wenn der Schlüssel eine Zeichenfolge ist, aber ich muss es als Int sortieren? – user984003
'sortierte (Schritte)' ist besser als 'sortierte (steps.keys())' – jamylak