दिलचस्प पोस्ट
ब्राउज़र या टैब बंद होने पर सत्र को बंद / मार डालें उद्देश्य सी में किसी ऑब्जेक्ट को कॉपी कैसे करें क्लाइंट-साइड जावास्क्रिप्ट में बेस 64 एन्कोडिंग और डीकोडिंग एंड्रॉइड के लिए स्थानीय चित्र कैशिंग समाधान: स्क्वायर पिकासो vs यूनिवर्सल इमेज लोडर एक्सेस प्रतिबंध: आवश्यक पुस्तकालय पर प्रतिबंध के कारण पहुंच योग्य नहीं है .. \ jre \ lib \ rt.jar C ++ स्ट्रिंग कन्वर्ट हेक्साडेसिमल और इसके विपरीत आईओएस में वर्तमान डिवाइस भाषा प्राप्त करना? कैसे homebrew अनुमतियों को ठीक करने के लिए? जीमेल एसएमटीपी को कोडिगनिटर ईमेल लाइब्रेरी के साथ ईमेल भेजना ऑब्जेक्ट के लिए XML स्ट्रिंग को कन्वर्ट करें कॉलबैक अजाक्स जेसन के साथ jQuery के स्वत: पूर्ण निर्धारित करें कि क्या कोई तत्व jQuery के साथ एक सीएसएस वर्ग है दर्ज किए गए संपादन टेक्स्ट में पाठ साफ़ करें क्लास में यह क्या अंतर है और यह जावा में है एक प्रवेश डेटाबेस में एक अनुलग्नक क्षेत्र में एक छवि संग्रहीत

पायथन: सूची कई विशेषताओं और मिश्रित आदेश के साथ क्रमबद्ध

मुझे कई विशेषताओं के साथ एक अजगर सूची को सॉर्ट करना होगा मैं उन सभी गुणों के लिए आरोही क्रम में आसानी से कर सकता हूं

L.sort(key=operator.attrgetter(attribute)).... 

लेकिन समस्या यह है, कि मैं आरोही / अवरोही के लिए मिश्रित कॉन्फ़िगरेशन का उपयोग कर रहा हूं … मुझे एसक्यूएल आदेश को "अनुकरण" करना है, जहां आप "नाम एएससी, साल डीईएससी" की तरह कुछ कर सकते हैं। एक कस्टम तुलना समारोह को लागू किए बिना अजगर में आसानी से ऐसा करने का कोई तरीका है?

वेब के समाधान से एकत्रित समाधान "पायथन: सूची कई विशेषताओं और मिश्रित आदेश के साथ क्रमबद्ध"

यदि आपकी विशेषताओं संख्यात्मक हैं, तो आपके पास यह है।

 def mixed_order( a ): return ( a.attribute1, -a.attribute2 ) someList.sort( key=mixed_order ) 

यदि आपकी विशेषताओं में स्ट्रिंग्स या अन्य अधिक जटिल ऑब्जेक्ट्स शामिल हैं, तो आपके पास कुछ विकल्प हैं

.sort() विधि स्थिर है: आप एकाधिक पास कर सकते हैं यह शायद सबसे सरल है यह भी उल्लेखनीय तेजी से है

 def key1( a ): return a.attribute1 def key2( a ): return a.attribute2 someList.sort( key=key2, reverse=True ) someList.sort( key=key1 ) 

यदि यह एकमात्र क्रम है, तो आप अपने स्वयं के विशेष-उद्देश्य तुलना ऑपरेटरों को परिभाषित कर सकते हैं। न्यूनतम, आपको __eq__ और __lt__ आवश्यकता है। अन्य चार सरल तर्क द्वारा इन दो से प्राप्त किया जा सकता है।

एक कस्टम फ़ंक्शन आपका कोड अधिक पठनीय प्रस्तुत करेगा। यदि आपके पास कई सॉर्टिंग ऑपरेशन हैं और आप उन फ़ंक्शन को बनाना नहीं चाहते हैं, तो आप लैम्ब्डा का उपयोग कर सकते हैं:

 L.sort(lambda x, y: cmp(x.name, y.name) or -cmp(x.year, y.year)) 

आप नहीं कर सकते हैं, लेकिन तुलना समारोह लेखन आसान है:

 def my_cmp(a, b): return cmp(a.foo, b.foo) or cmp(b.bar, a.bar) L.sort(my_cmp)