2012-04-07 192 views
12

我想遍歷對象的字典中的屬性附加傷害排序方式如何通過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) 

這給了我eror消息:「AttributeError的:‘海峽’對象有沒有屬性‘年齡’」

+0

謝謝你們,Karl Knechtel的評論是真實的。我沒有指出這一點。所以兩個答案(Nolen Royalty和Dugres)都是正確的。 – Fienchen21 2012-08-29 20:34:49

+0

這節省了我很多時間 – Sakeer 2017-07-24 02:55:02

回答

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

這將遍歷值,按屬性排序。這可能是也可能不是你想要的;在OP中不太清楚。 – 2012-04-07 08:39:01

+0

@KarlKnechtel絕對正確,在OP中有一些不明確的地方。我相信這種方法應該比我的速度快,但我確實認爲按鍵排序略微更清晰。 – 2012-04-07 08:46:11

-1

如何被顯示sorted方法

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

你錯過了這一點。遍歷字典迭代其密鑰。我們正在嘗試根據相應值的屬性對鍵進行排序。 – 2012-04-07 08:37:59

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

根據對應的值的屬性對鍵進行迭代。這可能是也可能不是你想要的;在OP中不太清楚。 – 2012-04-07 08:38:36

+0

@Karl:我想這是OP根據他們寫的內容尋找的。 – martineau 2012-04-07 11:20:56

相關問題