Arhn - архитектура программирования

как отсортировать список в python по двум аргументам

Я делаю проект о распознавании рукописного ввода, поэтому у меня есть изображение, я должен распознать текст в нем, поэтому я сделал все символы на изображении объектами (контуром), проблема в том, что после печати символов его печатается несортированным (или по x или по y), и мне нужно отсортировать полный объект списка сверху слева до нижнего правого.

Я попытался отсортировать по координатам y, а затем по координатам x он будет отсортирован как координаты x с самого начала.

a.sort(key = operator.attrgetter("intRectx"))     
a.sort(key = operator.attrgetter("intRectY"))

Я ожидаю, что проект напечатает персонажей так, как они написаны.

class Data():
 num1 = None           
 num2 = None        
 intRectX = 0                # x
 intRectY = 0                # y
 num3 = 0            
 num4 = 0        
 num5 = 0.0             

a = []                                                       # we will fill these shortly
for Data in all:                                    # for all contours
    if Data.checkIfContourIsValid():              # check if valid
        a.append(Data)                            # if so, append to valid contour list
a.sort(key = lambda x: (x.intRectY, x.intRectx))

Ответы:


1

Сортировка с выражением lambda, которое возвращает tuple:

a.sort(key = lambda x: (x.intRectx, x.intRectY))

Редактировать:

Если вы хотите отсортировать по y, тогда x поменяет порядок:

a.sort(key = lambda x: (x.intRectY, x.intRectx))
16.01.2019
  • я пробовал это, но я получил сообщение об ошибке: TypeError: 'a' object is not subscriptable 16.01.2019
  • @DeanAmir ах, я сделал глупую ошибку, попробуй сейчас 16.01.2019
  • Убедитесь, что intRectx и intRectY являются правильными атрибутами, если вы получаете AttributeError 16.01.2019
  • ошибка исчезла, но она все еще сортируется по координатам X 16.01.2019
  • @DeanAmir Должно быть a.sort(key = lambda x: (x.intRectY, x.intRectx)) 16.01.2019
  • @DeanAmir см. редактировать 16.01.2019
  • @Primusa см. редактировать 16.01.2019
  • но в чем проблема? он все еще не сортируется по вашим спецификациям? 16.01.2019
  • это не отсортировано так, как я этого хочу 16.01.2019
  • Вы сказали, что хотите сверху слева направо снизу. В предположении, что ваша ось x горизонтальна, а ось y вертикальна, это сортируется сверху слева вниз справа 16.01.2019
  • Можете ли вы привести пример предполагаемого ввода/вывода? 16.01.2019
  • ›a = [0,25,1,67], [0,8, 189], [1,2, 2], [1,3, 1,75],[1,9, 2,1],[2,1,4] ›выход = [1,9, 2,1],[2, 1.4],[1.2, 2],[1.3, 1.75], [0.8, 189],[0.25,1.67] 16.01.2019
  • это вход или выход? Потому что, если это вывод, который вы сортируете по координатам x, что и было в моем ответе в начале... 16.01.2019
  • мне нужно отсортировать это... как-то 17.01.2019
  • попробуйте a.sort(key = lambda x: (-x.intRectY, x.intRectx)), я не могу точно сказать, что именно вы хотите, так как ваш вывод немного запутался, но это может сработать для вас 17.01.2019
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..