2015-03-24 5 views
5

Я ищу способ сортировки моего массива массива, который имеет сложную структуру:Сортировка сложной структуры массива из массива

L=[[ 
[[1,1,1,1,1,1,1],1,56], 
[[6,6,6,6,6,6,6],1,3], 
[[3,3,3,3,3,3,3],1,54]], 
[[[2,2,2,2,2,2,2],2,42], 
[[5,5,5,5,5,5,5],2,6]]] 

Я woul'd нравится сортировать его последними элементы означающих (56, 3, 54 и 42, 6). То, что я хочу, чтобы получить его в том, что:

L=[[ 
[[6,6,6,6,6,6,6],1,3], 
[[3,3,3,3,3,3,3],1,54], 
[[1,1,1,1,1,1,1],1,56]], 
[[[5,5,5,5,5,5,5],2,6], 
[[2,2,2,2,2,2,2],2,42]]] 

Я уже пробовал: L.sort(key=lambda x: x[0][0][2]) , но это не работает ...

Я видел эти советы, но я не удалось сделать это работа:

How to sort a list of lists by a specific index of the inner list?

Любая помощь будет оценен по достоинству! Спасибо заранее!

ответ

4

Вы можете использовать itemgetter для сортировки нескольких индексов.
В этом случае индекс сортировки , а затем индекс на L[i]

import operator 
for i in range(len(L)): 
    L[i] = sorted(L[i], key=operator.itemgetter(1, 2)) 

или проще:

import operator 
    for s in L: 
     s.sort(key=operator.itemgetter(1, 2)) 

благодаря @georg

выход:

[[[[6, 6, 6, 6, 6, 6, 6], 1, 3], 
    [[3, 3, 3, 3, 3, 3, 3], 1, 54], 
    [[1, 1, 1, 1, 1, 1, 1], 1, 56]], 
[[[5, 5, 5, 5, 5, 5, 5], 2, 6], 
    [[2, 2, 2, 2, 2, 2, 2], 2, 42]]] 
+1

Вы можете упростить это: 'для s в L: s.sort (...)'. Нет необходимости в индексах - списки являются ссылками! – georg

+0

@georg Спасибо, я изменил свой ответ. – Aaron

+3

Нет, 's = sorted (s)' не будет работать! 's.sort()' имеет решающее значение. – georg

Смежные вопросы