Сортировка списка с пользовательским заказом в 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)