Pregunta

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

Quiero ordenarlo por el entero más grande a más pequeño. En este caso, 5 y 66. Pero no parece estar funcionando.

¿Fue útil?

Solución

La función sorted devuelve una lista new , por lo que deberá asignar los resultados de la función de esta manera:

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

Otros consejos

Use el método .sort para ordenar en el lugar:

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

Si desea utilizar ordenado , reasigne la variable:

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

Para la ordenación descendente, use reverse :

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

Entonces, será mejor que use itemgetter en lugar de un lambda :

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

Puede pasar, teclear y revertir a la función .sort

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

para uso de clasificación in situ

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

para crear otra lista, con uso de datos ordenados

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)

En respuesta al comentario de alex de que pensaba que sorted () funcionaba "como la función de clasificación":

Si funcionó "como la función de clasificación", es poco probable que se haya puesto en la biblioteca.

En cualquier caso, no hay una función de clasificación ... se refiere al método de clasificación de los objetos de la lista.

Demostración simple usando el intérprete interactivo:

>>> 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]

Aquí hay un consejo: busque patrones y similitudes, pero siempre verifique sus extrapolaciones intuitivas. Es posible que desee aplicar esas ideas a reverse y 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)]

Oye, cuando guardo algo en una matriz, no tiendo a preocuparme por el orden y, al final, uso sorted () , por ejemplo, así statlist = sorted ( statlist) y, si lo desea, de mayor a menor statlist = sorted (statlist, reverse = True) ¡Esa es la forma sencilla de llegar de mayor a menor!

Código de ejemplo donde he usado esto (solo un extracto)

    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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top