2011-01-07 11 views
8

मेरे पास कुछ फ़ील्ड के साथ कुछ का प्रतिनिधित्व करने वाला वर्ग है। जब इस वर्ग के उदाहरणों की एक सूची क्रमबद्ध की जाती है, तो मैं चाहता हूं कि उन्हें किसी विशेष क्रम में क्रमबद्ध किया जाए (प्रत्येक से एक विशेष कुंजी प्राप्त करें)। मैं सिर्फ list.sort(key=Classname.sortKey) कर सकता हूं और sortKey विधि को परिभाषित कर सकता हूं, लेकिन मैं बस list.sort() करता हूं और इसे काम करता हूं। मुझे लगता है कि मैं इसे __cmp__ ओवरराइड करके कर सकता हूं। हालांकि, मैं ऐसा कुछ करता हूं जब मैं किसी ऐसे चीज़ की तुलना कर रहा हूं जो मेरा डेटा प्रकार नहीं है? मुझे कुछ ऐसा लगता है ...पायथन में क्रमबद्ध डेटाटाइप कैसे बनाएं?

def __cmp__(self, o): 
    if isinstance(o, MyClass): 
     return cmp(self.sortKey(), o.sortKey()) 
    return object.__cmp__(self, o) ##**wrong 

लेकिन यह इसके बजाय काम करता है। मुझे परवाह नहीं है कि वे एक विषम सूची में क्या आदेश लेते हैं। मैं सिर्फ 0 वापस कर दूंगा लेकिन फिर MyClass(...) == x जैसी सामग्री हमेशा सत्य है, xMyClass का उदाहरण नहीं है।

उत्तर

11

चेक बाहर http://wiki.python.org/moin/HowTo/Sorting/

आप sort समारोह में बनाया गया जिस तरह से आप वर्णित काम करने के लिए अपनी कक्षा में __lt__ ओवरराइड करना चाहते।

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