python - Python .sort() 不完全排序数字
问题描述
从 API 请求数据时,我得到一个包含字典的列表,但是当我请求对其进行排序时,它并没有完全排序所有数字。
我运行的代码:
def getVolume(e):
return e["priceChangePercent"]
tickers.sort(reverse=True,key=getVolume)
for x in tickers:
print(x["symbol"]+" "+x["priceChangePercent"])
我得到的结果:
DLTBNB 9.729
RLCBNB 9.327
BRDBNB 9.087
EVXETH 8.699
||More numbers that are being sorted correctly||DASHBNB 3.123
ARDRETH 3.093
MATICBNB 23.832
MATICUSDT 20.087
XMRETH 2.946
||Random 23 showing up that does not belong there||
BCHSVUSDC 0
NXSBTC -9.700
GASBTC -9.585
SKYBTC -9.357
请求代码列表中 dic 数据时的字典示例:
{'symbol': 'ETHBTC', 'priceChange': '-0.00121400', 'priceChangePercent': '-4.363', 'weightedAvgPrice': '0.02695265', 'prevClosePrice': '0.02782400', 'lastPrice': '0.02661100', 'lastQty': '3.29400000', 'bidPrice': '0.02661100', 'bidQty': '6.70600000', 'askPrice': '0.02661900', 'askQty': '19.09500000', 'openPrice': '0.02782500', 'highPrice': '0.02841700', 'lowPrice': '0.02616300', 'volume': '320008.07300000', 'quoteVolume': '8625.06693308', 'openTime': 1557612831863, 'closeTime': 1557699231863, 'firstId': 121467734, 'lastId': 121655972, 'count': 188239}
解决方案
您正在排序字符串,而不是数字,您getVolume
需要float
先将值转换为:
def getVolume(e):
return float(e["priceChangePercent"])
或者,key
如果您希望通过以下方式返回字符串,则可以在函数中进行转换getVolume
:
tickers.sort(reverse = True, key = lambda x : float(getVolume(x)))
推荐阅读
- r - 使用 Crosstalk 和 Plotly 过滤直方图而不使用 `group` 参数
- python - Flask - 如何将来自 API 调用的日期时间 JSON 数据转换为“上次看到 X 小时/分钟前”?
- javascript - 如何在firestore(firebase)过滤数据并获取过滤后的数据?如何在数据库集合中使用“等于”?
- apache-nifi - NiFi如何使用(Java)通过自定义处理器获取当前处理器名称和处理器组名称
- html - 调整框宽度以确保锚元素包裹到下一行 - 用于 Codrops 的内联锚样式套件
- ansible - 从输出中提取值并发送到下一个任务
- amazon-web-services - AWS Dynamo DB 查询与分区键异步
- amazon-web-services - 将 docker 容器部署到 ECS 时未定义的卷
- android - 是否有任何 Doucusign Android 代码示例?
- envoyproxy - Envoy 代理作为显式代理