У меня есть код, который тяжело сортирует списки вложенных кортежей, поэтому большая часть времени выполнения тратится на сортировку.operator.itemgetter
ускорил простые сортировки, но, похоже, не может понять, как его реализовать для сортировки по n-му элементу вложенных кортежей, как, например, работает метод list.sort(key = lambda x: x[1][n])
.
Пример данных ниже;
import random
v1 = random.sample(range(1, 100), 10)
v2 = random.sample(range(1, 100), 10)
v3 = random.sample(range(1, 100), 10)
v4 = random.sample(range(1, 100), 10)
out = zip(v1, zip(v2, v3, v4))
[(18, (68, 11, 71)),
(72, (24, 3, 79)),
(2, (1, 84, 69)),
(24, (94, 79, 17)),
(19, (67, 76, 19)),
(44, (79, 12, 34)),
(42, (11, 33, 92)),
(90, (18, 52, 47)),
(65, (73, 59, 70)),
(95, (74, 85, 60))]
Если я хочу отсортировать по каждому кортежу второй элемент (в данном случае кортеж), я могу использовать:
import operator
out.sort(key = operator.itemgetter(1))
[(2, (1, 84, 69)),
(42, (11, 33, 92)),
(90, (18, 52, 47)),
(72, (24, 3, 79)),
(19, (67, 76, 19)),
(18, (68, 11, 71)),
(65, (73, 59, 70)),
(95, (74, 85, 60)),
(44, (79, 12, 34)),
(24, (94, 79, 17))]
Если я хочу отсортировать по второму элементу каждого кортежа (кортеж в данном случае) И это элементы второго элемента, который я могу использовать;
out.sort(key = lambda x: x[1][1])
[(72, (24, 3, 79)),
(18, (68, 11, 71)),
(44, (79, 12, 34)),
(42, (11, 33, 92)),
(90, (18, 52, 47)),
(65, (73, 59, 70)),
(19, (67, 76, 19)),
(24, (94, 79, 17)),
(2, (1, 84, 69)),
(95, (74, 85, 60))]
Можно ли это сделать с помощью itemgetter
?Спасибо.