Aby posortować listę list na drugiej kolumnie, należy operator.itemgetter()
dla łatwości i jasności:
from operator import itemgetter
outputlist = sorted(inputlist, key=itemgetter(1), reverse=True)
lub sortowania w miejscu:
from operator import itemgetter
inputlist.sort(key=itemgetter(1), reverse=True)
itemgetter()
jest trochę szybsze niż przy użyciu zadania lambda
.
Demo:
>>> from operator import itemgetter
>>> inputlist = [
... [1, 0.23],
... [2, 0.39],
... [4, 0.31],
... [5, 0.27],
... ]
>>> sorted(inputlist, key=itemgetter(1), reverse=True)
[[2, 0.39], [4, 0.31], [5, 0.27], [1, 0.23]]
Można by tylko zobaczyć swój wyjątek gdybyś zmiennoprzecinkowych wartości w inputlist bezpośrednio:
>>> inputlist.append(4.2)
>>> inputlist
[[1, 0.23], [2, 0.39], [4, 0.31], [5, 0.27], 4.2]
>>> sorted(inputlist, key=itemgetter(1), reverse=True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'float' object is not subscriptable
(dla Pythona 3; komunikat błędu Python 2 jest nieco inny, co powoduje, że zamiast tego jest TypeError: 'float' object has no attribute '__getitem__'
).
Jest to spowodowane tym, że wywołanie itergetter(1)
jest stosowane do wszystkich elementów na liście zewnętrznej, ale działa tylko na sekwencjach zagnieżdżonych, a nie na jednej wartości zmiennoprzecinkowej, która została dodana.
Przykro mi, ale to nie jest lista. Jest to ciąg liczb z znakami nowej linii, ale nie ma żadnej struktury Pythona. Proszę zaksięgować rzeczywisty kod, który się nie powiódł, oraz reprezentację listy. –
Teraz mamy sekwencję list Pythona; czy istnieje zewnętrzna lista? –
Oczywiście nie jest to temat wyłączony, ponieważ jest to pierwszy wynik wyszukiwania Google w celu posortowania listy 2D w języku Python, a najlepsza odpowiedź ma 15 głosów up. – JeffThompson