Ordenar una lista de cadenas numéricas en orden ascendente

He creado una base de datos sqlite que tiene una tabla que almacena los valores de temperatura. Los valores de temperatura se escriben en la base de datos en orden ascendente por primera vez. Luego leo los valores de temperatura de la base de datos en una lista y luego agrego esa lista a un cuadro combinado para seleccionar las temperaturas: funciona bien.

La lista resultante es, digamos:

templist = ['25', '50', '100', '150', '200', '250', '300']. 

Luego agrego un nuevo valor de temperatura, por ejemplo, ’33’ a la base de datos.

Se añade al final de la tabla. Si leo las temperaturas ahora, la lista se convertirá en:

 ['25', '50', '100', '150', '200', '250', '300', '33']. 

Si hago templist.sort() o sorted(templist) , el resultado final es

 ['150', '200', '25', '250', '300', '33', '50'] 

¿Hay alguna forma sencilla de ordenar la lista en orden ascendente para que obtenga:

 ['25', '33', '50', '100', '150', '200', '250', '300'] 

El enfoque recomendado en este caso es ordenar los datos en la base de datos, agregando un ORDER BY al final de la consulta que obtiene los resultados, algo como esto:

 SELECT temperature FROM temperatures ORDER BY temperature ASC; -- ascending order SELECT temperature FROM temperatures ORDER BY temperature DESC; -- descending order 

Si por alguna razón no es una opción, puede cambiar el orden de clasificación de esta manera en Python:

 templist = [25, 50, 100, 150, 200, 250, 300, 33] sorted(templist, key=int) # ascending order > [25, 33, 50, 100, 150, 200, 250, 300] sorted(templist, key=int, reverse=True) # descending order > [300, 250, 200, 150, 100, 50, 33, 25] 

Como se ha señalado en los comentarios, la clave int (o float si se están almacenando valores con decimales) es necesaria para ordenar correctamente los datos si los datos recibidos son de tipo string , pero sería muy extraño almacenar los valores de temperatura como cadenas, si ese es el caso, vuelva atrás y solucione el problema desde la raíz, y asegúrese de que las temperaturas almacenadas sean números.

En Python, sorted obras sorted como usted quiere con enteros:

 >>> sorted([10,3,2]) [2, 3, 10] 

Parece que tienes un problema porque estás usando cadenas:

 >>> sorted(['10','3','2']) ['10', '2', '3'] 

(debido a que el orden de las cadenas comienza con el primer carácter, y “1” aparece antes de “2”, no importa qué caracteres sigan), que se puede corregir con la key=int

 >>> sorted(['10','3','2'], key=int) ['2', '3', '10'] 

que convierte los valores en números enteros durante la ordenación (se llama como una función – int('10') devuelve el número entero 10 )

y como se sugiere en los comentarios, también puede ordenar la lista en sí, en lugar de generar una nueva:

 >>> l = ['10','3','2'] >>> l.sort(key=int) >>> l ['2', '3', '10'] 

pero me gustaría ver por qué tienes cadenas en absoluto. debe ser capaz de guardar y recuperar números enteros. Parece que estás guardando una cadena cuando deberías guardar un int? (sqlite es inusual entre las bases de datos, ya que almacena los datos en el mismo tipo que se da, incluso si el tipo de columna de la tabla es diferente).

y una vez que comience a guardar números enteros, también puede volver a ordenar la lista de sqlite agregando order by ... al comando sql:

 select temperature from temperatures order by temperature;