2012-04-07 23 views
12

मैं एक गुण में वस्तुओं की एक शब्दकोश से अधिक पुनरावृति करना चाहते हैं जिस तरह सेपाइथन में विशेषता मान द्वारा ऑब्जेक्ट्स के शब्दकोशों को कैसे क्रमबद्ध करें?

import operator 

class Student: 
     def __init__(self, name, grade, age): 
       self.name = name 
       self.grade = grade 
       self.age = age 


studi1=Student('john', 'A', 15) 
studi2=Student('dave', 'B', 10) 
studi3=Student('jane', 'B', 12) 

student_Dict = {} 
student_Dict[studi1.name]=studi1 
student_Dict[studi2.name]=studi2 
student_Dict[studi3.name]=studi3 

for key in (sorted(student_Dict, key=operator.attrgetter('age'))): 
    print(key) 

अनुसार क्रमबद्ध यह मैं eror संदेश देता है:

+0

धन्यवाद दोस्तों, कार्ल कंचटेल की टिप्पणियां सच हैं। मैंने इस बिंदु को विशिष्ट नहीं किया। तो दोनों जवाब (Nolen रॉयल्टी और Dugres) सही हैं। – Fienchen21

+0

यह मेरे बहुत सारे समय बचाता है – Sakeer

उत्तर

9
for student in (sorted(student_Dict.values(), key=operator.attrgetter('age'))): 
    print(student.name) 
+1

यह गुणों द्वारा क्रमबद्ध मानों पर पुनरावृत्त करता है। यह हो सकता है कि आप जो चाहते हैं हो या न हो; ओपी में यह बिल्कुल स्पष्ट नहीं है। –

+0

@ करलकेचटेल निश्चित रूप से सही है कि ओपी में कुछ अस्पष्टता है। मेरा मानना ​​है कि यह विधि मेरी तुलना में तेज़ी से होनी चाहिए, हालांकि मुझे लगता है कि चाबियों पर छंटनी थोड़ा और स्पष्ट है। –

-1

कैसे: "AttributeError 'str' वस्तु 'उम्र' कोई गुण नहीं है" sorted विधि

sorted(student_Dict.keys(), key=lambda student: student.age) 
+2

आप बिंदु चूक गए हैं। एक कुत्ते पर इटरेटिंग इसकी चाबियों पर फिर से चलती है। हम संबंधित मान की विशेषता के अनुसार चाबियाँ सॉर्ट करने का प्रयास कर रहे हैं। –

4
>>> for key in sorted(student_Dict, key = lambda name: student_Dict[name].age): 
...  print key 
... 
dave 
jane 
john 
+1

यह संबंधित मान की विशेषता के अनुसार, चाबियों पर फिर से चलाता है। यह हो सकता है कि आप जो चाहते हैं हो या न हो; ओपी में यह बिल्कुल स्पष्ट नहीं है। –

+0

@ करल: मुझे लगता है कि ओपी ने जो लिखा है उसके आधार पर यह वही है। – martineau