Как отсортировать 3D-массив по нескольким ключам - PullRequest
2 голосов
/ 23 мая 2019

Мне нужно отсортировать трехмерный массив по нескольким ключам, и я не знаком с лямбдой.У меня есть массив:

arry = [,
    [[3,1,2], 'foo', 'bar'],
    [[1,2,3], 'foo', 'bar'],
    [[2,1,3], 'foo', 'bar']

    #[[x,y,z], 'blah', 'blah']
]

И мне нужно отсортировать его так, чтобы значение z было самое высокое , но если значения z равны, сортировать по yзначение наименьшее , а если y равно, сортировать по x наименьшее .Поэтому выходной массив должен выглядеть так:

arry = [
    [[2,1,3], 'foo', 'bar'],
    [[1,2,3], 'foo', 'bar'],
    [[3,1,2], 'foo', 'bar']

    #[[x,y,z], 'blah', 'blah']
]

1 Ответ

3 голосов
/ 23 мая 2019

Используйте sorted с key:

sorted(arr, key=lambda x:(-x[0][2], x[0][1], x[0][0]))

Вывод:

[[[2, 1, 3], 'foo', 'bar'],
 [[1, 2, 3], 'foo', 'bar'],
 [[3, 1, 2], 'foo', 'bar']]

Обратите внимание на знак - на x[0][2] для реализации различных критериев сравнения.

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