我有一个有几个不同值的类。我希望能够通过不同的值对这些对象的列表进行排序,但我不知道该怎么做。我希望能够为任何值和两个方向(最少到最大,反之亦然)对它们进行排序。
例如,下面是一个示例类,以及一个示例对象列表:
class Sample(object):
def __init__(self, name, sampleValue1, sampleValue2):
self.name
self.value1 = sampleValue1
self.value2 = sampleValue2
def __repr__(self):
return self.name
# creating sample objects for clarification
objectNames = ['A','B','C','D']
values1 = [3,4,1,2]
values2 = [1,4,2,3]
sampleObjects = list()
for i in xrange(4):
obj = Sample(objectNames[i], values1[i], values2[i])
sampleObjects.append(obj)
从每个对象值中对sampleObject进行排序应该产生以下内容。排序应按指定的顺序返回对象列表(对象名称在下面使用)。
value1: [C,D,A,B]
value1 reversed: [B,A,D,C]
value2: [A,C,D,B]
value2 reversed: [B,D,C,A]
答案 0 :(得分:7)
Python内置sorted
函数具有签名:
sorted(iterable[, cmp[, key[, reverse]]])
和
key 指定一个参数的函数,用于从每个列表元素中提取比较键
对于你的情况:
>>> sorted(sampleObjects, key=lambda obj: obj.value1)
[C, D, A, B]
>>> sorted(sampleObjects, key=lambda obj: obj.value2)
[A, C, D, B]