Вы можете использовать len
и отменить его в функции lambda
.
Это должно дать вам то, что вы хотите:
res = sorted(newdata, key=lambda k: (-len(k[0]), k[1]), reverse=True)
**Output**
[('Anna', 1), ('Ivan', 1), ('Roman', 1), ('Anton', 1), ('Abbas', 1),
('Vadim', 1), ('Pavel', 1), ('Sergey', 5), ('Viktor', 3), ('Nikita', 1),
('Maksim', 1), ('Stepan', 1), ('Aleksei', 2), ('Evgeniy', 2),
('Dmitriy', 1), ('Artemiy', 1), ('Vectoran', 1), ('Aleksandr', 2)]
РЕДАКТИРОВАТЬ: немного большеобъяснение
Поскольку вы хотите отсортировать по длине по возрастанию , но по значению по убыванию .Если бы оба числа были положительными ((len(k[0]), k[1])
), вы бы в конечном итоге отсортировали по длине, а затем по значению, но оба были бы по возрастанию ИЛИ по убыванию, в зависимости от того, что вы установили для reverse
.Таким образом, чтобы отсортировать по длине по возрастанию THEN по значению по убыванию, мы делаем длину отрицательной с помощью -len()
и устанавливаем reverse=True
.Если вы сделали (len(k[0]), -k[1])
с reverse=False
, вы должны получить тот же результат.