Python字典列表按价格排序异常:字符串数值排序问题
问题原因及解决方案
哦,这个坑我之前踩过!你遇到的排序异常,核心原因是价格存储的是字符串类型,而你直接用字符串来做排序依据了。
为什么会出现这种现象?
字符串的排序逻辑是逐字符比较ASCII码值,而不是像数字那样比较数值大小:
- 比如'100.59'的第一个字符是
'1',它的ASCII码是49;而'47.09'的第一个字符是'4',ASCII码是52。因为49 < 52,所以不管后面的数字是什么,'100.59'都会被排在'47.09'前面。 - 当所有价格的整数部分都是两位时,比如'47.09'和'47.99',前两位字符的ASCII码一致,会继续比较后面的字符(比如小数点后的'0'和'9'),这时候看起来排序是正常的。
怎么解决?
只需要在排序时,把字符串类型的价格转换成数值类型(这里用float就合适),让排序逻辑基于数值大小而非字符ASCII码:
sortedlist = sorted(shop_price_array, key=lambda k: float(k['price']))
如果你的价格字符串里可能包含货币符号(比如'$47.09'),那需要先做个预处理去掉符号再转float,比如:
sortedlist = sorted(shop_price_array, key=lambda k: float(k['price'].replace('$', '')))
这样排序结果就会完全按照价格的实际数值大小来排列啦!
内容的提问来源于stack exchange,提问作者Liudas Butkus
相关产品推荐
相关产品推荐

