Comments 15
Один вопрос. Как отсортировать с помощью key по двум ключам в разном порядке?
Например, по ключу age по возрастанию а по name по убыванию?
Начинать городить на выходе tuple вида (-age, name)?
Например, по ключу age по возрастанию а по name по убыванию?
Начинать городить на выходе tuple вида (-age, name)?
+2
Так и приходится:
key = lambda obj: (obj.age, -obj.iq, obj.weight)
key = lambda obj: (obj.age, -obj.iq, obj.weight)
+3
А теперь что делать если два поля в разную сторону — текстовые.
0
Такая сортировка — это уже целая фича, и было бы странно, если бы стандартная библиотека предоставляла такие возможности.
Один из вариантов реализации — определить rich compasion методы для объекта. Если критерии сортировки меняются — перед каждой сортировкой обвёртывать в объект с нужной конфигурацией сравнения.
Один из вариантов реализации — определить rich compasion методы для объекта. Если критерии сортировки меняются — перед каждой сортировкой обвёртывать в объект с нужной конфигурацией сравнения.
-2
Спасибо большое за информацию. Похоже key вычисляется один на элемент в первом проходе, а далее сортировка одних лишь ключей происходит, а cmp вызывается многократно для каждого конкретного элемента при сравнении его с другими.
0
Python 2.7.2
>>>ls = [(1,2,3), (2,1,3), (2,3,1)]
>>>ls.sort(key=reversed)
>>>ls
>>>[(1, 2, 3), (2, 1, 3), (2, 3, 1)]
>>>ls = [(1,2,3), (2,1,3), (2,3,1)]
>>>ls.sort(key=reversed)
>>>ls
>>>[(1, 2, 3), (2, 1, 3), (2, 3, 1)]
-1
>> На ночь глядя


-1
Пример
неправильный, должно быть itemgetter('id'), возможно, оно будет медленнее
def with_op(lst):
lst.sort(key=itemgetter('name'))
неправильный, должно быть itemgetter('id'), возможно, оно будет медленнее
+2
Only those users with full accounts are able to leave comments. Log in, please.
Сортировки: key vs cmp