Как отсортировать список списков по первому элементу подсписка, а затем по третьему элементу - PullRequest
0 голосов
/ 04 июня 2018

У меня есть список списков.Например,

[ 
[1, 2, 0.10], 
[1, 3, 0.22],
[1, 4, 0.20],
[1, 5, 0.37],
[1, 8, 0.60],
[1, 10, 0.01],
[1, 15, 0.26],
[2, 3, 0.28],
[2, 6, 0.12],
[2, 7, 0.72],
[2, 10, 0.77],
[2, 11, 0.36],
...
]

Я хочу отсортировать список списков по первому элементу подсписка, а затем по третьему элементу и получить первые три результата каждого первого элемента, как это сделать?спасибо!

пример результата,

[ 
[1, 15, 0.26],
[1, 5, 0.37],
[1, 8, 0.60],
[2, 11, 0.36],
[2, 7, 0.72],
[2, 10, 0.77],
...
]

1 Ответ

0 голосов
/ 04 июня 2018

Вот одно решение, использующее itertools.groupby.Мы используем клавишу tuple для сортировки по первому элементу, а затем по последнему элементу в обратном порядке.

from itertools import groupby

sorter = sorted(A, key=lambda x: (x[0], -x[2]))
grouper = groupby(sorter, key=lambda x: x[0])

res = [list(j)[:3] for _, j in grouper]

print(res)

[[[1, 8, 0.6], [1, 5, 0.37], [1, 15, 0.26]],
 [[2, 10, 0.77], [2, 7, 0.72], [2, 11, 0.36]]]

Кажется, вы хотите отсортировать сначала по убыванию, а затем по возрастанию для результата.Если это требование, вы можете отменить результат, т.е.

res = [list(j)[:3][::-1] for _, j in grouper]

Спасибо @ Ev.Kounis за предложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...