#python #list #sorting
Вопрос:
У меня есть список, который содержит другие списки. Каждый элемент этого списка содержит 5 элементов, примерно так:
requests = [['abc', 'def', 'abc.def@email.com', 'GROUP1', '000'],
['ghi', 'jkl', 'ghi,jkl@email.com', 'GROUP4', '111'],
['mno', 'pqr', 'mno.pqr@email.com', 'GROUP4', '222'],
['stu', 'vxy', 'stu.vxy@email.com', 'GROUP2', '333'],
['123', '456', '123.456@email.com', 'GROUP4', '444'],
['A12', 'B34', 'A12.B34f@email.com', 'GROUP3', '555']]
Я хотел бы отсортировать этот список таким образом, чтобы каждый список, содержащий элемент, равный GROUP4, был помещен в конец списка. Итак, результат будет выглядеть следующим образом:
requests = [['abc', 'def', 'abc.def@email.com', 'GROUP1', '000'],
['stu', 'vxy', 'stu.vxy@email.com', 'GROUP2', '333'],
['A12', 'B34', 'A12.B34f@email.com', 'GROUP3', '555'],
['ghi', 'jkl', 'ghi,jkl@email.com', 'GROUP4', '111'],
['mno', 'pqr', 'mno.pqr@email.com', 'GROUP4', '222'],
['123', '456', '123.456@email.com', 'GROUP4', '444'],]
Мне удалось отсортировать их на основе этого конкретного элемента, используя:
requests.sort(key=lambda x: x[3])
Но это просто сортирует их в алфавитном порядке, основываясь на 4-м элементе. Это не сработает, если присутствует ГРУППА 5 или ГРУППА 6, так как эти 2 будут последними элементами.
Есть какие-нибудь идеи о том, как это сделать?
Большое спасибо!
Комментарии:
1. Попробуйте это простое изменение —
requests.sort(key=lambda x: x[3] == "GROUP4")
используйте трюкTrue
, когда 3-й элементGROUP4
Ответ №1:
Вы можете изменить lambda
, чтобы проверить, является ли 4-й элемент 'GROUP4'
requests.sort(key=lambda x: x[3] == 'GROUP4')
Если вы хотите отсортировать остальную часть списка, а также использовать tuple
в lambda
двух элементах, он будет отсортирован 'GROUP4'
сначала по порядку, а затем по лексикографии
requests.sort(key=lambda x: (x[3] == 'GROUP4', x[3]))
Ответ №2:
Переместите списки с группой 4 по индексу [3] в конец путем сортировки по логическому значению.
requests.sort(key=lambda el: el[3] == "GROUP4")
Комментарии:
1. Я думаю, вы могли бы уточнить свой ответ, указав, что
.sort
гарантированно будет стабильная сортировка, что в данном случае означает, что ваш фрагмент кода будет перемещать"GROUP4"
элементы только в конец списка, без каких-либо других изменений порядка элементов.