2012-04-07 83 views
12

Tôi muốn để lặp qua một cuốn từ điển của các đối tượng trong một atribute được sắp xếp cáchLàm thế nào để sắp xếp các từ điển của các đối tượng theo giá trị thuộc tính trong python?

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) 

này mang lại cho tôi được thông báo eror: "AttributeError: đối tượng 'str' không có thuộc tính 'tuổi'"

+0

Cảm ơn các bạn, nhận xét của Karl Knechtel là đúng. Tôi đã không suy nghĩ về điểm này. Vì vậy, cả hai câu trả lời (Nolen Royalty và Dugres) là chính xác. – Fienchen21

+0

Điều đó tiết kiệm rất nhiều thời gian của tôi – Sakeer

Trả lời

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

Điều này lặp qua các giá trị, được sắp xếp theo thuộc tính. Điều này có thể hoặc không thể là những gì bạn muốn; nó không phải là khá rõ ràng trong OP. –

+0

@KarlKnechtel chắc chắn đúng là có một số sự mơ hồ trong OP. Tôi tin rằng phương pháp này nên nhanh hơn tôi, mặc dù tôi nghĩ rằng phân loại trên các phím là hơi rõ ràng hơn. –

-1

thế nào được thể hiện trong tài liệu của sorted phương pháp

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

Bạn đã bỏ lỡ điểm. Lặp lại trên một dict lặp qua các phím của nó. Chúng tôi đang cố gắng sắp xếp các khóa theo thuộc tính của giá trị tương ứng. –

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

Điều này lặp qua các phím, theo thuộc tính của giá trị tương ứng. Điều này có thể hoặc không thể là những gì bạn muốn; nó không phải là khá rõ ràng trong OP. –

+0

@Karl: Tôi nghĩ đây là những gì mà OP tìm kiếm dựa trên những gì họ đã viết. – martineau

1
class Student: 
    def __init__(self, name, grade, age): 
      self.name = name 
      self.grade = grade 
      self.age = age 
    def __repr__(self): 
      return repr((self.name, self.grade, self.age)) 


student_objects = [ 
    Student('john', 'A', 15), 
    Student('jane', 'B', 12), 
    Student('dave', 'B', 10), 
] 
print student_objects 
student_objects.sort(key=attrgetter('age')) 
print student_objects 

nguồn: https://wiki.python.org/moin/HowTo/Sorting

Các vấn đề liên quan