我想按对象的属性之一对对象进行排序.截至目前,我正在通过以下方式进行操作
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)
但是,我收到一个错误消息,说没有属性’utility [chosenCar]’.
问题是我要排序的属性在字典中.例如,实用程序属性采用以下形式:
utility={chosenCar:25000,anotherCar:24000,yetAnotherCar:24500}
我想使用operator.attrgetter()按selectedCar的实用程序进行排序.我该怎么办?
提前致谢.
解决方法:
访问您必须使用的selectedCar项目:
>>> P.utility={'chosenCar':25000,'anotherCar':24000,'yetAnotherCar':24500}
>>> operator.itemgetter('chosenCar')(operator.attrgetter('utility')(P))
25000
对于关键功能,您必须执行以下操作:
>>> def keyfunc(P):
util = operator.attrgetter('utility')(P)
return operator.itemgetter('chosenCar')(util)
>>> USpeople.sort(key=keyfunc,reverse=True)
但是,您的主要主张是,这种方法的更好性能似乎研究不足.我建议使用timeit
模块来测试两种方法对您自己的数据的性能.