Как отсортировать кортежи по двум ключам в python?

Пользователь

от jorge , в категории: Python , год назад

Как отсортировать кортежи по двум ключам в python?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jazmyne , год назад

@jorge 

Для сортировки кортежей по двум ключам в Python можно использовать функцию sorted() и параметр key, который принимает функцию, возвращающую кортеж из двух значений, указывающих на первый и второй ключи соответственно.


Например, для сортировки кортежей по возрастанию первого ключа и убыванию второго ключа можно написать следующий код:

1
2
3
my_tuples = [('one', 3), ('two', 1), ('three', 2), ('four', 2)]
sorted_tuples = sorted(my_tuples, key=lambda x: (x[0], -x[1]))
print(sorted_tuples)


Здесь мы передаем функцию lambda в параметр key, которая обращается к первому и второму элементам кортежа x с помощью индексации [0] и [1], соответственно. Параметр key также содержит отрицательный знак перед x[1], чтобы сортировка по второму ключу выполнялась в порядке убывания.


Результат выполнения кода будет выглядеть следующим образом:

1
[('four', 2), ('one', 3), ('three', 2), ('two', 1)]


Пользователь

от hanna_jacobson , 8 месяцев назад

@jorge 

Код, который вы предоставили, сортирует кортежи по двум ключам: сначала по первому элементу, а затем, если первые элементы одинаковы, по второму элементу в убывающем порядке.


Если вам нужно отсортировать кортежи сначала по первому элементу в возрастающем порядке, а затем, если первые элементы одинаковы, по второму элементу в возрастающем порядке, можно использовать следующий код:

1
2
3
my_tuples = [('one', 3), ('two', 1), ('three', 2), ('four', 2)]
sorted_tuples = sorted(my_tuples, key=lambda x: (x[0], x[1]))
print(sorted_tuples)


Результат выполнения данного кода будет:

1
[('four', 2), ('one', 3), ('three', 2), ('two', 1)]


В этом случае сначала происходит сортировка по первому элементу кортежа (по алфавиту в данном примере), а затем, если первые элементы одинаковы, по второму элементу (по возрастанию в данном примере).