per ordinare un elenco di liste sulla seconda colonna, utilizzare operator.itemgetter()
per facilità e chiarezza:
from operator import itemgetter
outputlist = sorted(inputlist, key=itemgetter(1), reverse=True)
o, per ordinare sul posto:
from operator import itemgetter
inputlist.sort(key=itemgetter(1), reverse=True)
itemgetter()
è un po 'più veloce utilizzando un lambda
per l'attività.
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]]
Faresti vedere solo il tuo eccezione se si fosse in virgola mobile valori nel vostro inputlist direttamente:
>>> 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
(per Python 3; messaggio di errore Python 2 di è leggermente diverso, con conseguente TypeError: 'float' object has no attribute '__getitem__'
invece).
Questo perché la chiamata itergetter(1)
viene applicata a tutti gli elementi nell'elenco esterno ma funziona solo su sequenze ordinate nidificate, non sul valore a virgola mobile ora aggiunto.
Mi dispiace, ma non è un elenco. Questa è una sequenza di numeri con newline, ma non una qualsiasi struttura Python. Si prega di inviare il codice effettivo che non è riuscito per voi e la rappresentazione della lista. –
Ora abbiamo una sequenza di liste python; c'è una lista esterna? –
Evidentemente non off-topic, poiché è il risultato della ricerca Google numero 1 per l'ordinamento di un elenco 2D in Python e la risposta migliore ha 15 voti positivi. – JeffThompson