2013-04-24 10 views
6

यदि मेरे पास [4,2,5,1,3] की सूची है तो मैं इसे पहले कुछ फ़ंक्शन f द्वारा सॉर्ट करना चाहता हूं और फिर f के समान मान वाले नंबरों के लिए इसे नंबर की परिमाण से क्रमबद्ध करना चाहता हूं।मैं अजगर में माध्यमिक सॉर्टिंग कैसे करूं?

यह कोड काम नहीं कर रहा प्रतीत होता है।

list5 = sorted(list5) 
list5 = sorted(list5, key = lambda vertex: degree(vertex)) 

माध्यमिक सॉर्टिंग पहले: list5 को परिमाण के आधार पर क्रमबद्ध किया गया है। प्राथमिक क्रमबद्ध अगली: सूची 5 संख्याओं के कुछ फ़ंक्शन के आधार पर क्रमबद्ध है।

+1

पर btw तुम सिर्फ कर सकते हैं 'कुंजी = degree', यहाँ' lambda' अनावश्यक – GP89

+0

है जब आप कहते हैं कि यह "काम नहीं लगता है", क्या क्या आप देखते हैं? – ecatmur

उत्तर

30

क्रमबद्ध यह एक (firstkey, secondkey) द्वारा टपल:

sorted(list5, key=lambda vertex: (degree(vertex), vertex)) 
+0

एक पर आरोही करने और दूसरे पर उतरने के लिए, दो कॉल: list5.sort (key = lambda vertex: vertext, reverse = true) list5.sort (key = lambda vertex: डिग्री (vertext)) –

+0

मुझे लगता है कि यह क्यों है एक बहुत पठनीय समाधान, एक बहुत ही कुशल समाधान भी मौजूद है? इसे स्वयं कोडिंग किए बिना, यानी अनावश्यक होने पर दूसरे मूल्य की गणना नहीं करना। – borgr

2

एक फोन पर, लेकिन टपल द्वारा youcan तरह।

sorted(list5, lambda x: (degree(x),x)) 

यदि आपको इसकी आवश्यकता हो तो रिवर्स ध्वज को न भूलें।

1

अजगर 3 डॉक्स से sorting

from operator import itemgetter, attrgetter 
student_objects = [ 
    Student('john', 'A', 15), 
    Student('jane', 'B', 12), 
    Student('dave', 'B', 10), 
] 
student_tuples = [ 
    ('john', 'A', 15), 
    ('jane', 'B', 12), 
    ('dave', 'B', 10), 
] 

#The operator module functions allow multiple levels of sorting. For example, to sort by grade then by age: 

sorted(student_tuples, key=itemgetter(1,2)) 
sorted(student_objects, key=attrgetter('grade', 'age')) 
संबंधित मुद्दे