2016-11-24 2 views
3

Я не знаю, возможно ли это или нет. Я пытаюсь найти способ сортировки вложенного списка по следующему условиюВложенный список и сортировка в python

  1. я хочу, чтобы отсортировать форму 1 пункт к другому (не всему списку только часть)
  2. сортировка должна быть сделана на основой 3-го элемента подсписков

идею о том, что я хочу:

PAE=[['a',0,8], 
     ['b',2,1], 
     ['c',4,3], 
     ['d',7,2], 
     ['e',8,4]] 

    #PAE[1:4].sort(key=itemgetter(2)) (something like this)  
    or  
    #sorted(PAE[1:4],key=itemgetter(2)) (something like this) 
` #^i know both are wrong but just for an idea 
` 
    #output should be like this 
    ['a', 0, 8] 
    ['b', 2, 1] 
    ['d', 7, 2] 
    ['c', 4, 3] 
    ['e', 8, 4] 

Я новичок в Python, но я попробовал свой уровень лучше всего, чтобы найти решение, но не удалось.

ответ

3

Сортировать Срез и записать его обратно:

>>> PAE[1:4] = sorted(PAE[1:4], key=itemgetter(2)) 
>>> PAE 
[['a', 0, 8], ['b', 2, 1], ['d', 7, 2], ['c', 4, 3], ['e', 8, 4]] 
+0

Спасибо. короткий и правильный ответ. – Syed

3

Это должно сделать:

from operator import itemgetter 
PAE=[['a',0,8], 
    ['b',2,1], 
    ['c',4,3], 
    ['d',7,2], 
    ['e',8,4]] 

split_index = 1 

print PAE[:split_index]+sorted(PAE[split_index:],key=itemgetter(2)) 
#=> [['a', 0, 8], ['b', 2, 1], ['d', 7, 2], ['c', 4, 3], ['e', 8, 4]] 
+0

Спасибо, ваше решение сработало. – Syed

0

здесь без spliting, вопрос в том, Что является лучшим для читаемости

PAE=[['a',0,8], 
    ['b',2,1], 
    ['c',4,3], 
    ['d',7,2], 
    ['e',8,4]] 

print (sorted(PAE, key=lambda PAE: PAE[1] if not PAE[1] else PAE[2])) 
>>> [['a', 0, 8], ['b', 2, 1], ['d', 7, 2], ['c', 4, 3], ['e', 8, 4]] 
+1

Я не думаю, что он отвечает на вопрос. Ваш выбор зависит от второго элемента каждого списка, не так ли? –

+1

НЕТ Эрик, ключ сортировки относительно в этом случае –

+1

Да, но вопрос не упоминал об этом. –

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