如何正确使用python中的排序函数

how to properly use sorting function in python

本问题已经有最佳答案,请猛点这里访问。

我有一个关于Python排序函数的问题。我无法理解它实际上是如何工作的。这是我的课:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class DataScript(object):

    def __init__(self, index, name, size):
        self.index = index
        self.name = name
        self.size = size

    def __cmp__(self, other):
        if hasattr(other, 'getKey'):
            if self.getKey() == other.getKey():
                return 0
            else:
                if self.getKey() > other.getKey():
                    return 1
                else:
                    return -1

    def getKey(self):
        return self.size

    def __iter__(self):
        return self

    def __next__(self):
        self.index += 1
        try:
            return data[self.index - 1]
        except IndexError:
            self.idx = 0
            raise StopIteration  # Done iterating.

    def __repr__(self):
        return '[' + str(data.index) + ', ' + data.name + ', ' + convert_bytes(data.size) + ']'

据说我必须给出我要排序的列表和getket函数来获取排序键。但是,当我尝试运行这样的一个操作时:我得到一个错误,即某个对象不可重复,或者没有针对该对象的getkey函数?这就是我如何称呼它,我不得不说它对我没有意义。第一个例子不起作用,我猜想它实际上不能确定项目索引,什么也不做。第二个例子有效,我不明白为什么。

1
sorted(resultList, key=resultList.getKey)

1
resultList.sort(key=resultList.getKey)


为什么不:

1
2
3
from operator import attrgetter

sorted(resultList, key=attrgetter('size'))


排序EDOCX1[0]列表的一种方法是:

1
sorted(resultList, key=lambda elem: elem.getKey())

有关更多信息,请参阅此处