Giống như được chỉ định bởi Zagorulkin Dmitry, bạn không được chuyển lambda vào chức năng sắp xếp. Hành vi mặc định của chức năng sắp xếp là hành động trên các phím.
steps = {1:"val1", 5:"val2", 2:"val3"}
for key in sorted(steps):
print steps[key]
...
val1
val3
val2
Tuy nhiên, chuyển lambda sang chức năng sắp xếp không phải là hoạt động tốt hơn về lợi ích nhỏ (tức là 'quá mức'), nhưng thực sự không mong muốn. Nó làm cho mã ít đọc được và nó cũng chậm hơn, đặc biệt nếu bạn sẽ áp dụng nó vào các từ điển rất lớn hoặc thực hiện cuộc gọi nhiều lần. Ngoài việc làm cho mục tiêu phân loại rõ ràng hơn đối với cặp (khóa, giá trị), không có lợi ích gì khi sử dụng nó. Thời gian sau đây cho thấy hiệu suất bạn nhận được khi chỉ định 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
đã hoạt động, nhờ – user984003
Điều gì sẽ xảy ra nếu khóa là một chuỗi, nhưng tôi cần sắp xếp nó là một int? – user984003
'sắp xếp (bước)' tốt hơn 'sắp xếp (bước.keys())' – jamylak