Сортировка списка с пользовательским заказом в Python

У меня есть список

mylist = [['123', 'BOOL', '234'], ['345', 'INT', '456'], ['567', 'DINT', '678']]

Я хочу отсортировать его с порядком 1. DINT 2. INT 3. BOOL

Результат:

[['567', 'DINT', '678'], ['345', 'INT', '456'], ['123', 'BOOL', '234']]

Я видел другие подобные вопросы в stackoverflow, но ничего подобного или легко применимо ко мне.

Ответ 1

SORT_ORDER = {"DINT": 0, "INT": 1, "BOOL": 2}

mylist.sort(key=lambda val: SORT_ORDER[val[1]])

Все, что мы делаем здесь, это предоставление нового элемента для сортировки путем возврата целого для каждого элемента в списке, а не всего списка. Мы могли бы использовать встроенные тернарные выражения, но это было бы немного громоздким.

Ответ 2

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

newlist=[];
for sub_list in mylist:
     if(sub_list[1] == 'DINT']):
          newlist.append(sub_list);

for sub_list in mylist:
     if(sub_list[1] == 'INT']):
         newlist.append(sub_list);

for sub_list in mylist:
     if(sub_list[1] == 'BOOL']):
            newlist.append(sub_list);

Ответ 3

     python 3.2

    1. sorted(mylist,key=lambda x:x[1][1])

    2. sorted(mylist,reverse=True)