Сортировка Python – список объектов

Я хотел бы использовать метод somelist.sort () для этого, если это возможно.

У меня есть список, содержащий объекты, все объекты имеют переменную resultType, которая является целым числом. Я бы хотел отсортировать список, используя этот номер.

Как мне это сделать?

Благодаря!

  • Может ли Cython скомпилировать EXE?
  • Как вы сортируете файлы численно?
  • Импорт пользовательских модулей в IPython.parallel с помощью sync_imports ()
  • Выполнение python попыток Патриции
  • Обертка .net для Google App Engine?
  • Использование модуля многопроцессорности python для ввода-вывода с pygame на Mac OS 10.7
  • Как проверить, существует ли n-й элемент в списке Python?
  • Нарушение функции-члена в отладчике Python
  • 3 Solutions collect form web for “Сортировка Python – список объектов”

    somelist.sort(key = lambda x: x.resultType) 

    Вот еще один способ сделать то же самое, что вы часто увидите:

     import operator s.sort(key = operator.attrgetter('resultType')) 

    Вы также можете посмотреть на sorted если вы еще не видели его. Он не изменяет исходный список – он возвращает новый отсортированный список.

    Конечно, это не обязательно лямбда. Любая переданная функция, такая как нижняя, будет работать

     def numeric_compare(x, y): if x > y: return 1 elif x == y: return 0 else: #x < y return -1 a = [5, 2, 3, 1, 4] a.sort(numeric_compare) 

    Источник: сортировка Python

    Итак, в вашем случае …

     def object_compare(x, y): if x.resultType > y.resultType: return 1 elif x.resultType == y.resultType: return 0 else: #x.resultType < y.resultType return -1 a.sort(object_compare) 

    Вышеупомянутая лямбда – это, безусловно, самый компактный способ сделать это, но также используется operator.itemgetter .

     import operator #L = [('c', 2), ('d', 1), ('a', 4), ('b', 3)] map(operator.itemgetter(0), L) #['c', 'd', 'a', 'b'] map(operator.itemgetter(1), L) #[2, 1, 4, 3] sorted(L, key=operator.itemgetter(1)) #[('d', 1), ('c', 2), ('b', 3), ('a', 4)] 

    Таким образом, вы будете использовать itemgetter ('resultType'). (Предполагается, что getitem определен.)

     sorted(L, key=operator.itemgetter('resultType')) 
     somelist.sort(cmp = lambda x, y: cmp(x.resultType, y.resultType)) 

    Это лучше чем:

     somelist.sort(key = lambda x: x.resultType) 

    В первом случае мы передаем функцию сравнения, которая используется для парного сравнения элементов в списке. Во втором случае мы выделяем новый список пар результата ключевой функции и исходное значение. Затем мы сортируем этот список, затем отделяем значения ключей от пар. Это действительно полезно, если ваша функция сравнения стоит дорого, но это всего лишь пустая трата памяти, если сравнение действительно дешево.

    То есть расширение ключевой версии выглядит примерно так:

     l = [y for x,y in sorted(zip([key(i) for i in l], l))] 

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

    Обратите внимание, что параметр функции cmp должен возвращать -1, 0, 1 в менее, равном и большем, чем случаи. Вы можете написать это самостоятельно, но вы также можете использовать встроенную функцию cmp, которая является более четкой.

    Python - лучший язык программирования в мире.