2012-04-07 7 views
12

Ich möchte ein Wörterbuch von Objekten in einem atribute WeiseWie Wörterbücher von Objekten nach Attributwert in Python zu sortieren?

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) 

Nachricht Das gibt mir die eror sortiert iterieren: „Attribute:‚str‘Objekt hat kein Attribut‚Alter‘“

+0

Danke Jungs, sind Karl Knechtel Kommentare wahr. Ich habe diesen Punkt nicht erwähnt. Also beide Antworten (Nolen Royalty und Dugres) sind richtig. – Fienchen21

+0

Das rettete viel meiner Zeit – Sakeer

Antwort

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

Dies iteriert die Werte sortiert nach dem Attribut. Dies kann oder kann nicht sein, was Sie wollen; es ist nicht ganz klar im OP. –

+0

@KarlKnechtel hat definitiv recht, dass es im OP einige Unklarheiten gibt. Ich glaube, dass diese Methode schneller sein sollte als meine, obwohl ich denke, dass das Sortieren über die Schlüssel etwas klarer ist. –

-1

Wie ist in der Dokumentation der sorted Methode

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

Sie haben den Punkt verpasst. Iterieren über ein Diktat iteriert über seine Schlüssel. Wir versuchen, die Schlüssel nach einem Attribut des entsprechenden Wertes zu sortieren. –

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

Dies iteriert über die Schlüssel, entsprechend dem Attribut des entsprechenden Wertes. Dies kann oder kann nicht sein, was Sie wollen; es ist nicht ganz klar im OP. –

+0

@Karl: Ich denke, das ist, was das OP nach dem, was sie geschrieben haben, sucht. – martineau