ज़ागोरुलकिन दिमित्री द्वारा इंगित की तरह, आपको सॉर्टिंग फ़ंक्शन में लैम्ब्डा पास नहीं करना चाहिए। सॉर्टिंग फ़ंक्शन डिफ़ॉल्ट व्यवहार कुंजी पर कार्य करना है।
steps = {1:"val1", 5:"val2", 2:"val3"}
for key in sorted(steps):
print steps[key]
...
val1
val3
val2
हालांकि, छँटाई कार्य करने के लिए लैम्ब्डा गुजर छोटे लाभ का एक बेहतर संचालन (अर्थात एक 'overkill') नहीं है, लेकिन यह वास्तव में अवांछित है। यह कोड को कम पठनीय बनाता है और यह धीमा भी होता है, खासकर यदि आप इसे बहुत बड़े शब्दकोशों पर लागू करने जा रहे हैं या कॉल को कई बार बनाते हैं। सॉर्टिंग लक्ष्य को (कुंजी, मूल्य) जोड़े के संबंध में अधिक स्पष्ट बनाने के अलावा, इसका उपयोग करने का कोई लाभ नहीं है। निम्नलिखित समय एक लैम्ब्डा निर्दिष्ट करते समय आपको मिलने वाली प्रदर्शन हिट दिखाते हैं।
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
जो काम करता है, धन्यवाद – user984003
क्या होगा यदि कुंजी एक स्ट्रिंग है, लेकिन मुझे इसे int के रूप में सॉर्ट करने की आवश्यकता है? – user984003
'क्रमबद्ध (चरण)' क्रमबद्ध से बेहतर है (step.keys()) ' – jamylak