用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)

但是,我收到一个错误消息,说没有属性’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模块来测试两种方法对您自己的数据的性能.

上一篇:java-排序我的ArrayAdapter不会更改我的数据源


下一篇:C#-在结构内部对列表进行排序