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