2014-09-23 69 views
3

我有一个类有几个不同的值。我希望能够通过不同的值对这些对象的列表进行排序,但我不知道如何去做。我希望能够对它们的任何值和两个方向进行排序(从最小到最大,反之亦然)。下面如何根据python中的不同对象值对对象列表进行排序?

例如是一个示例类,与采样对象的列表一起:

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) 

从每个对象的值进行排序sampleObjects应该产生什么下文。排序应按指定顺序返回对象列表(对象名称在下面使用)。

value1: [C,D,A,B] 
value1 reversed: [B,A,D,C] 
value2: [A,C,D,B] 
value2 reversed: [B,D,C,A] 

回答

7

的Python内置sorted函数具有签名:

sorted(iterable[, cmp[, key[, reverse]]]) 

指定用于提取从每个列表的比较关键一个参数的函数的元件

适合您的情况:

>>> sorted(sampleObjects, key=lambda obj: obj.value1) 
[C, D, A, B] 
>>> sorted(sampleObjects, key=lambda obj: obj.value2) 
[A, C, D, B] 
相关问题