Как сделать сортировку в python?
Пробовал sort по списку, там None возвращает, потом sorted присвоил в новую пере менную вроде норм, но у меня список из словарей и по ключу оно ругается. Еще reverse зачем-то воткнул..
Ваш вопрос
Пробовал sort по списку, там None возвращает, потом sorted присвоил в новую пере менную вроде норм, но у меня список из словарей и по ключу оно ругается. Еще reverse зачем-то воткнул..
sort умеет сравнивать числа и строки из коробки, а вот словари между собой — нет, отсюда и ошибка. Нужен key, который говорит, что именно сравнивать.
Пример: students = [{'name': 'Аня', 'grade': 4}, {'name': 'Боря', 'grade': 5}]. Дальше sorted(students, key=lambda x: x['grade'], reverse=True) даст список от большей оценки к меньшей, сам список students не тронется.
Если хочешь менять список на месте, а не получать новый — students.sort(key=lambda x: x['grade'], reverse=True), тут результат запишется в тот же список. Разница между sorted и sort именно в этом: одна функция возвращает копию, второй метод меняет исходник и ничего не возвращает.
4o
Способ | когда использовать sorted(список) | нужен новый отсортированный список, старый не трогается список.sort() | сортировка на месте, старый список меняется sorted(список, key=..., reverse=True) | сортировка словарей или объектов по нужному полю, по убыванию
Для списка словарей ключ обязателен: sorted(students, key=lambda x: x['grade'], reverse=True). Без key python не знает, что сравнивать, и падает с ошибкой.
Пока нет премиум-вопросов в подборке
Не нашли то, что искали?
Задайте свой вопрос
Лучший ответ
v4-pro
v4-pro
Как сделать сортировку в python?
Через sorted с параметром key: sorted(данные, key=lambda x: x['поле'], reverse=True). Без key сортировка чисел и строк работает сама, а для словарей и объектов key обязателен, иначе TypeError.