我可以用2个键对对象列表进行排序吗?

Ben*_*enH 2 python python-2.6

我有以下课程(修剪):

class DiskInstance(object):

    def __init__(self, name, epoch, size)
        self.name   = name
        self.epoch  = epoch
        self.size   = size
Run Code Online (Sandbox Code Playgroud)

然后我定义了一个外部函数(上面的类外部):

def getepoch(object):
    return object.epoch
Run Code Online (Sandbox Code Playgroud)

然后我实例化该类的几个对象并附加到名为DISKIMAGES的列表中.

我目前正在这样排序:

for image in sorted(DISKIMAGES, key=getedate, reverse=True):
Run Code Online (Sandbox Code Playgroud)

有什么方法可以先按getedate排序,然后按尺寸排序?

感谢任何帮助.

Jul*_*nck 6

如果你想按时期排序然后按大小排序,这应该有效:

sorted(DISKIMAGES, key=lambda x: (x.epoch, x.size), reverse=True)
Run Code Online (Sandbox Code Playgroud)

或者如@chepner所指出的,您可以使用该operator.attrgetter方法

import operator
sorted(DISKIMAGES, key=operator.attrgetter('epoch', 'size'), reverse=True)
Run Code Online (Sandbox Code Playgroud)

  • 您也可以使用`operator.attrgetter('epoch','size')`来代替`lambda`表达式. (3认同)