s = [['2019', 1], ['2018', 0], ['2017', 'qwe']] # первые эл-ты вложенных списков – строки; вторые – либо строка, либо число
s.sort()
s.sort(key = lambda x: x[0])
>>> import sys
>>> sys.version
>>> '3.6.0 (default, Jan 23 2017, 17:35:20) [MSC v.1900 32 bit (Intel)]'
В Python 2.6 и в более ранних версиях способ упорядочения основан на именах типов, вовлеченных в операцию сравнения, например любые целые числа всегда меньше любых строк, потому что строка “int” меньше, чем строка “str”.
При выполнении операции сравнения никогда не выполняется преобразование типов объектов, за исключением сравнивания объектов числовых типов.
В Python 3.0 такой порядок был изменен: попытки сравнивания объектов различных типов возбуждают исключение – вместо сравнивания по названиям типов. Так как метод сортировки использует операцию сравнения, это означает, что инструкция[1, 2, ‘spam’].sort()
будет успешно выполнена в Python 2.X, но возбудит исключение в версии Python 3.0 и выше.
Кроме того, в версии Python 3.0 больше не поддерживается возможность передачи методу sort произвольной функции сравнения, для реализации иного способа упорядочения.
Чтобы обойти это ограничение, предлагается использовать именованный аргумент key=func, в котором предусматривать возможность трансформации значений в процессе сортировки.