Как отсортировать словари объектов по значению атрибута в python?

Я хотел бы перебрать словарь объектов в порядке сортировки атрибута

<code>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)
</code>

Это дает мне сообщение об ошибке: & quot; AttributeError: & quot; str & apos; объект не имеет атрибута "возраст";

 Fienchen2129 авг. 2012 г., 22:34
Спасибо, ребята, комментарии Карла Кнехта верны. Я не уточнил этот момент. Так что оба ответа (Нолен Роял и Дугрес) верны.
 Sakeer24 июл. 2017 г., 04:55
Это сэкономило мне много времени

Ответы на вопрос(4)

Решение Вопроса
for student in (sorted(student_Dict.values(), key=operator.attrgetter('age'))):
    print(student.name)
 07 апр. 2012 г., 10:39
Это перебирает значения, отсортированные по атрибуту. Это может или не может быть то, что вы хотите; это не совсем ясно в ОП.
 07 апр. 2012 г., 10:46
@KarlKnechtel определенно прав, что в ОП есть некоторая двусмысленность. Я считаю, что этот метод должен быть быстрее, чем мой, хотя я думаю, что сортировка по клавишам немного более понятна.
>>> for key in sorted(student_Dict, key = lambda name: student_Dict[name].age):
...     print key
... 
dave
jane
john
 07 апр. 2012 г., 13:20
@ Карл: Я думаю, что это то, что ищет ОП на основании того, что они написали.
 07 апр. 2012 г., 10:38
Это перебирает ключи в соответствии с атрибутом соответствующего значения. Это может или не может быть то, что вы хотите; это не совсем ясно в ОП.
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

источник:https://wiki.python.org/moin/HowTo/Sorting

Как это показано в документацииотсортированный метод

sorted(student_Dict.keys(), key=lambda student: student.age)
 07 апр. 2012 г., 10:37
Вы упустили момент. Итерация по dict итерирует его ключи. Мы пытаемся отсортировать ключи по атрибуту соответствующего значения.

Ваш ответ на вопрос