Я хочу отсортировать объекты по одному из своих атрибутов. В настоящее время, я делаю это следующим образомСортировка объектов в Python
USpeople.sort(key=lambda person: person.utility[chosenCar],reverse=True)
Это прекрасно работает, но я читал, что с помощью operator.attrgetter() может быть более быстрым способом для достижения такого рода. Во-первых, это правильно? Предполагая, что это правильно, как я могу использовать operator.attrgetter() для достижения такого рода?
Я попытался,
keyFunc=operator.attrgetter('utility[chosenCar]')
USpeople.sort(key=keyFunc,reverse=True)
Однако я получаю сообщение об ошибке сказав, что нет атрибута 'полезности [chosenCar].
Проблема в том, что атрибут, по которому я хочу сортировать, находится в словаре. Например, атрибут утилита в следующем виде:
utility={chosenCar:25000,anotherCar:24000,yetAnotherCar:24500}
Я хочу, чтобы отсортировать по полезности chosenCar с помощью operator.attrgetter(). Как я могу это сделать?
Заранее спасибо.
Спасибо за указание на то, что скорость не увеличится , Тем не менее, я хотел бы понять ваше решение для использования operator.attrgetter для будущего. Объект, который у меня есть, находится в списке. Например, people = [P1, P2, P3, P4] , где P1, P2, P3, P4 являются лицами. Я хочу отсортировать это с помощью attrgetter. Что я пишу вместо (P), которое у вас есть во второй строке. Спасибо. – Curious2learn
@ Curious: обновлено – SilentGhost
Конечно, 'operator.attrgetter ('utility') (P)' - просто глупый способ записи 'P.utility'. Причина использования 'operator.attrgetter' и' operator.itemgetter' заключается в том, когда вы можете использовать их * напрямую *. Если вы собираетесь написать свою собственную ключевую функцию, это будет просто «вернуть P.utility ['selectedCar]], точно так же, как и лямбда. –