2014-09-23 1 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] 
Смежные вопросы