lin*_*oid 50 python sorting list
我创建了一个sqlite数据库,它有一个存储温度值的表.温度值首次以升序写入数据库.然后我将数据库中的温度值读入列表,然后将该列表添加到组合框中以选择温度 - 工作正常.
结果列表是:
templist = ['25', '50', '100', '150', '200', '250', '300'].
Run Code Online (Sandbox Code Playgroud)
然后我向数据库添加一个新的温度值,比如'33'.
它被附加到表的末尾.如果我现在读取温度,列表将变为:
['25', '50', '100', '150', '200', '250', '300', '33'].
Run Code Online (Sandbox Code Playgroud)
如果我做templist.sort()
或sorted(templist)
,最终的结果是
['150', '200', '25', '250', '300', '33', '50']
Run Code Online (Sandbox Code Playgroud)
是否有任何简单的方法按升序对列表进行排序,以便我得到:
['25', '33', '50', '100', '150', '200', '250', '300']
Run Code Online (Sandbox Code Playgroud)
Ósc*_*pez 73
在这种情况下,推荐的方法是对数据库中的数据进行排序ORDER BY
,在查询结尾处添加一个取结果,如下所示:
SELECT temperature FROM temperatures ORDER BY temperature ASC; -- ascending order
SELECT temperature FROM temperatures ORDER BY temperature DESC; -- descending order
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因不是一个选项,您可以在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]
Run Code Online (Sandbox Code Playgroud)
正如评论中所指出的那样,如果收到的数据是类型的,那么正确排序数据需要int
密钥(或者float
如果存储了带小数的值)string
,但将温度值存储为字符串是非常奇怪的,如果在这种情况下,返回并修复根部的问题,并确保存储的温度是数字.
and*_*oke 29
在python中sorted
工作就像你想要的整数:
>>> sorted([10,3,2])
[2, 3, 10]
Run Code Online (Sandbox Code Playgroud)
看起来你有问题,因为你正在使用字符串:
>>> sorted(['10','3','2'])
['10', '2', '3']
Run Code Online (Sandbox Code Playgroud)
(因为字符串排序以第一个字符开头,"1"出现在"2"之前,无论后面是什么字符)都可以修复 key=int
>>> sorted(['10','3','2'], key=int)
['2', '3', '10']
Run Code Online (Sandbox Code Playgroud)
在排序期间将值转换为整数(它被称为函数 - int('10')
返回整数10
)
并且根据评论中的建议,您还可以对列表本身进行排序,而不是生成新列表:
>>> l = ['10','3','2']
>>> l.sort(key=int)
>>> l
['2', '3', '10']
Run Code Online (Sandbox Code Playgroud)
但我会调查为什么你有字符串.你应该能够保存和检索整数.你应该保存一个int,看起来你正在保存一个字符串?(sqlite在数据库中是不常见的,因为它存储的数据类型与给定的类型相同,即使表列类型不同).
一旦你开始保存整数,你也可以通过添加order by ...
sql命令从sqlite中获取列表:
select temperature from temperatures order by temperature;
Run Code Online (Sandbox Code Playgroud)