2012-07-28 5 views
10

आप sorted कार्य करने के लिए key तर्क का उपयोग करके myclass की एक सरणी सॉर्ट कर सकते हैं:पायथन: 'कुंजी' तर्क के उपयोग के बिना कस्टम क्लास को सॉर्ट करें?

sortedlist = sorted(myclasses, key=lambda obj: obj.myproperty) 

वहाँ हमारी कक्षा के लिए एक प्राकृतिक आदेश परिभाषित करने के लिए एक तरीका है? शायद कुछ जादू विधि ताकि हमें हर बार एक कुंजी में गुजरना पड़े?

जैसे

class myclass: 
    def __init__(self,a,b): 
     self.key1 = a 
     self.key2 = b 

    def __sortkey__(self): 
     return self.key2 

या यह स्वाभाविक रूप से अगर हम __le__ शायद परिभाषित काम करेंगे?

उत्तर

3

मैं __cmp__

class myclass: 
    def __init__(self,a,b): 
     self.key1 = a 
     self.key2 = b 

    def __cmp__(self, other): 
     return cmp(self.key2, other.key2) 
+0

आह। अच्छा! इसे http://docs.python.org/library/functions.html#sorted – mpen

+8

के अंतर्गत नहीं मिला है ध्यान दें कि '__cmp__' पायथन 3 – samfrances

13

इसके अलावा अधिभावी __cmp__ करने से यह कर हैं, तो आप यह तथाकथित "अमीर तुलना ऑपरेटरों" __eq__, __le__, __lt__, __gt__, और __ge__ साथ भी कर सकते हैं। उन सभी को परिभाषित करने के बजाय, आप functools.total_ordering कक्षा सजावट 2.7 +/3.1 + में उपयोग कर सकते हैं। __cmp__ 3.x में चला गया है।

+1

में भी काम नहीं करता है। '__le__' लागू करना आसान है क्योंकि मुझे केवल एक बूल वापस करने की आवश्यकता है। – mpen

संबंधित मुद्दे