2012-04-07 13 views
12

me gustaría repetir un diccionario de objetos en un atributo ordenados manera¿Cómo ordenar diccionarios de objetos por valor de atributo en 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) 

Esto me da el mensaje EROR: "AttributeError: objeto 'str' no tiene atributo 'edad'"

+0

Gracias, amigos, los comentarios de Karl Knechtel son ciertos. No especifiqué este punto. Entonces ambas respuestas (Nolen Royalty y Dugres) son correctas. – Fienchen21

+0

Eso ahorró gran parte de mi tiempo – Sakeer

Respuesta

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

Esto itera sobre los valores, ordenados por el atributo. Esto puede o no ser lo que quieres; no está del todo claro en el OP. –

+0

@KarlKnechtel tiene razón en que hay cierta ambigüedad en el PO. Creo que este método debería ser más rápido que el mío, aunque creo que clasificar las claves es un poco más claro. –

-1

Cómo se muestra en la documentación de sorted método

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

Te has perdido el punto. Iterando sobre un dict itera sobre sus claves. Estamos tratando de clasificar las claves de acuerdo con un atributo del valor correspondiente. –

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

Esto itera sobre las teclas, de acuerdo con el atributo del valor correspondiente. Esto puede o no ser lo que quieres; no está del todo claro en el OP. –

+0

@Karl: Creo que esto es lo que el OP está buscando según lo que escribieron. – 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 

source: https://wiki.python.org/moin/HowTo/Sorting

Cuestiones relacionadas