Domanda

statlist = [('abc',5,1), ('bzs',66,1), ... ]
sorted(statlist, key=lambda x: int(x[1]))

Voglio ordinarlo per intero dal più grande al più piccolo. In questo caso, 5 e 66. Ma non sembra funzionare.

È stato utile?

Soluzione

La funzione ordinata restituisce un nuovo elenco quindi sarà necessario assegnare i risultati della funzione in questo modo:

new_list = sorted(statlist, key=lambda x: int(x[1])) 

Altri suggerimenti

Utilizza il metodo .sort per l'ordinamento sul posto:

statlist = [('abc',5,1), ('bzs',66,1), ... ]
statlist.sort(key=lambda x: int(x[1]))

Se si desidera utilizzare ordinato , riassegnare la variabile:

statlist = [('abc',5,1), ('bzs',66,1), ... ]
statlist = sorted(statlist, key=lambda x: int(x[1]))

Per l'ordinamento decrescente, utilizzare reverse :

statlist = [('abc',5,1), ('bzs',66,1), ... ]
statlist = sorted(statlist, key=lambda x: int(x[1]), reverse=True)

Quindi, è meglio usare itemgetter invece di lambda :

import operator
statlist = [('abc',5,1), ('bzs',66,1), ... ]
statlist = sorted(statlist, key=operator.itemgetter(1), reverse=True)

È possibile passare, digitare e invertire la funzione .sort

>>> x.sort(key=lambda x:x[1],reverse=True)
>>> x
[('bzs', 66, 1), ('abc', 5, 1)]
>>>

per uso di ordinamento sul posto

statlist.sort(key=lambda x: x[1])

per creare un altro elenco, con dati ordinati utilizzare

otherlist = sorted( statlist, key=lambda x: x[1] )
from operator import itemgetter
statlist = [('abc',5,1), ('bzs',66,1), ... ]

# statlist.sort modifiest the statlist, sorted returns a new one
# reverse puts the largest items to the front
statlist.sort(key=itemgetter(1), reverse=True)

In risposta al commento di alex che pensava che sort () funzionasse " come la funzione sort " ;:

Se ha funzionato "come la funzione di ordinamento", è improbabile che sia stato inserito nella libreria.

In ogni caso, non esiste alcun tipo di funzione ... fai riferimento al metodo degli oggetti dell'elenco.

Dimostrazione semplice usando l'interprete interattivo:

>>> alist = [3, 2, 1]; x = alist.sort(); print x; print alist
None
[1, 2, 3]
>>> alist = [3, 2, 1]; x = sorted(alist); print x; print alist
[1, 2, 3]
[3, 2, 1]

Ecco un consiglio: cerca modelli e somiglianze, ma verifica sempre le tue estrapolazioni intuitive. Potresti applicare queste idee a reverse e reverse .

>>> s = [('xyz', 8, 1), ('abc',5,1), ('bzs',66,1) ]
>>> s = sorted(s, key=lambda x: int(x[1]))
>>> s.reverse()
>>> print s
[('bzs', 66, 1), ('xyz', 8, 1), ('abc', 5, 1)]

Ehi ogni volta che sto salvando qualcosa su un array non tendo a preoccuparmi dell'ordine e alla fine uso sort () ad esempio come questo statlist = ordinato ( statlist) e se lo volevi dal più grande al più piccolo statlist = ordinato (statlist, reverse = True) Questo è il modo semplice di diventare il più grande al più piccolo!

Codice di esempio in cui l'ho usato (solo un estratto)

    while i <= math.sqrt(intnum):
        if (intnum % i) == 0:
            numbers.insert(0,i)
            numbers.insert(0,int(intnum/i))
            print(i,":", int(intnum/i))
        i += 1
    numbers = sorted(numbers, reverse = True)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top