Python: сортировка списка с несколькими атрибутами и смешанным порядком

Можно установить запуск в каталоге с помощью следующей команды

, которая ключ \в / переключателе TR.

SCHTASKS /Create /u username /p pswd /ru "NT AUTHORITY\SYSTEM"
  /rp /sc ONSTART /tn task-name /tr "\"D:\name-of-file-to-run\" "
19
задан Benjamin 7 January 2014 в 10:48
поделиться

3 ответа

Если ваши атрибуты числовые, у вас есть это.

def mixed_order( a ):
    return ( a.attribute1, -a.attribute2 )

someList.sort( key=mixed_order )

Если ваши атрибуты включают строки или другие более сложные объекты, у вас есть некоторые варианты.

Метод .sort () стабилен: вы можете выполнять несколько проходов. Это, пожалуй, самое простое. Это также замечательно быстро.

def key1( a ): return a.attribute1
def key2( a ): return a.attribute2

someList.sort( key=key2, reverse=True )
someList.sort( key=key1 )

Если это единственная сортировка, вы можете определить свои собственные специальные операторы сравнения. Как минимум, вам нужно __ eq __ и __ lt __ . Остальные четыре можно вывести из этих двух с помощью простой логики.

29
ответ дан 30 November 2019 в 03:12
поделиться

Пользовательская функция сделает ваш код более читабельным. Если у вас много операций сортировки и вы не хотите создавать эти функции, вы можете использовать лямбда:

L.sort(lambda x, y: cmp(x.name, y.name) or -cmp(x.year, y.year))
7
ответ дан 30 November 2019 в 03:12
поделиться

Нельзя, но написать функцию сравнения несложно:

def my_cmp(a, b):
    return cmp(a.foo, b.foo) or cmp(b.bar, a.bar)
L.sort(my_cmp)
6
ответ дан 30 November 2019 в 03:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: