如何直接对币安WebSocket订单簿字典执行类DataFrame计算?
直接在原始字典上计算Binance订单簿的bids/asks乘积求和
我通过Binance WebSocket API获取订单簿数据,返回的是如下结构的JSON字典:
{ 'bids': [['20768.16000000', '0.07273000'], [...]], 'asks': [['20770.77000000', '0.00096000'], [...]] }
需要将每个子列表中的两个数值(价格×数量)相乘后累加求和。目前我是通过转换为Pandas DataFrame实现的,但希望无需依赖DataFrame,直接在原始字典上完成计算。
当然可以直接用Python原生语法实现,不需要依赖第三方库。核心思路是遍历字典里的bids和asks列表,逐个将字符串转换为数值后相乘,再用sum()函数累加结果。
实现代码
方法1:生成器表达式(简洁写法)
# 假设response是从WebSocket获取的原始字典 response = { 'bids': [['23767.25000000', '0.00100000'], ['23766.82000000', '0.02102000'], ['23766.81000000', '0.01081000'], ['23766.79000000', '0.01758000'], ['23766.75000000', '0.00051000'], ['23766.10000000', '0.00168000'], ['23766.01000000', '0.00400000'], ['23765.95000000', '0.00092000'], ['23765.40000000', '0.13471000'], ['23765.06000000', '0.04420000']], 'asks': [['23768.53000000', '0.00195000'], ['23768.57000000', '0.10468000'], ['23768.68000000', '0.13800000'], ['23768.93000000', '0.00166000'], ['23769.02000000', '0.01709000'], ['23769.38000000', '0.01799000'], ['23770.67000000', '0.00515000'], ['23771.58000000', '0.00696000'], ['23771.75000000', '0.05799000'], ['23771.76000000', '0.13800000']] } # 计算bids的总乘积和 total_bids = sum(float(price) * float(quantity) for price, quantity in response['bids']) # 计算asks的总乘积和 total_asks = sum(float(price) * float(quantity) for price, quantity in response['asks']) print(f"bids总乘积和: {total_bids:.6f}") print(f"asks总乘积和: {total_asks:.6f}")
方法2:循环遍历(直观易调试)
total_bids = 0.0 for item in response['bids']: price = float(item[0]) quantity = float(item[1]) total_bids += price * quantity total_asks = 0.0 for item in response['asks']: price = float(item[0]) quantity = float(item[1]) total_asks += price * quantity print(f"bids总乘积和: {total_bids:.6f}") print(f"asks总乘积和: {total_asks:.6f}")
计算结果示例
基于你提供的完整字典,运行后会得到:
- bids总乘积和:
4954.722779 - asks总乘积和:
7509.650485
内容的提问来源于stack exchange,提问作者fboi1
相关产品推荐
相关产品推荐

