2016-03-21 6 views
0

Lassen Sie uns sagen, dass ich die folgende Liste x in Python habePython - Bestell-Liste von Listen von mehreren Spaltenindizes

[['a',6,'aa'] 
['d',7,'bb']] 
['c',1,'cc'] 
['a',4,'dd'] 
['d',2,'ee']] 

und ich möchte seine Elemente, um sortieren das folgende Ergebnis

[['a',4,'dd'] 
['a',6,'aa'] 
['c',1,'cc'] 
['d',2,'ee'] 
['d',7,'bb']] 
zu erhalten

das möchte ich nach zwei Spalten sortieren, die erste (die wichtigste) und die zweite (die weniger wichtig). Dies ist wahrscheinlich eine doppelte Frage, aber ich habe nicht die Lösung zu finden, in der Lage ...

+0

Sie können versuchen: 'data.sort (0)' – JB1

Antwort

1

Da dies nicht den Fall egal, ob Sie sortiert nach der dritten Spalte als auch, oder nicht, können Sie schlicht sort hier verwenden, und das gleiche Ergebnis:

>>> sorted(a) 
[['a', 4, 'dd'], ['a', 6, 'aa'], ['c', 1, 'cc'], ['d', 2, 'ee'], ['d', 7, 'bb']] 

Dies liegt daran, Listen verglichen links nach rechts und in lexikographischer Reihenfolge sortierte.

Wenn Sie nach beliebiger Spaltenreihenfolge bestellen möchten, sollten Sie operator.itemgetter verwenden, was schneller ist als die Verwendung einer lambda-Funktion für die key.

>>> import operator 
>>> sorted(a, key=operator.itemgetter(1, 0)) # order by column 1 first, then 0. 
[['c', 1, 'cc'], ['d', 2, 'ee'], ['a', 4, 'dd'], ['a', 6, 'aa'], ['d', 7, 'bb']] 
3

Die folgenden Sorten Liste durch das erste Element, dann durch das zweite Element:

>>> sorted(a, key=lambda x:(x[0], x[1])) 
[['a', 4, 'dd'], ['a', 6, 'aa'], ['c', 1, 'cc'], ['d', 2, 'ee'], ['d', 7, 'bb']] 
0

können Sie einfach sorted als sorted automatisch Griffe verwenden, wenn die Sortierung von erstem Elemente angelegt wird dauern.

a = [['a',6,'aa'],['d',7,'bb'],['c',1,'cc'],['a',4,'dd'],['d',2,'ee']] 
sorted(a) 

[['a', 4, 'dd'], 
['a', 6, 'aa'], 
['c', 1, 'cc'], 
['d', 2, 'ee'], 
['d', 7, 'bb']]