Python嵌套字典数组提取balances有效值问题求助
问题描述
原始Python嵌套字典数据:
{'code': 200, 'msg': '', 'snapshotVos': [{'data': {'balances': [{'asset': 'ADD', 'free': '10', 'locked': '0'}, {'asset': 'RDP', 'free': '0', 'locked': '0'}, {'asset': 'SHIB', 'free': '0', 'locked': '947415'}], 'totalAsset': '152'}, 'type': 'spot', 'updateTime': 1703807999000}]}
需求:提取balances数组内的对象,保留asset、free、locked三个键,同时移除free和locked数值均为0的对象。
尝试的代码:
print(repo['snapshotVos']) rows = [] for re in repo['snapshotVos']: typeOrder = re['data'] rows.append(typeOrder) print(rows) rows1 = [] for re1 in rows: typeOrder = re1['balances'][0] rows1.append(typeOrder) print(rows1)
运行结果:
>>> 200 >>> [{'type': 'spot', 'updateTime': 1703807999000, 'data': {'totalAssetOfBtc': '0.00021152', 'balances': [{'asset': 'ADD', 'free': '10', 'locked': '0'}, {'asset': 'ADXOLD', 'free': '0', 'locked': '0'}]}}] >>> [{'totalAssetOfBtc': '0.00021152', 'balances': [{'asset': 'ADD', 'free': '10', 'locked': '0'}, {'asset': 'ADXOLD', 'free': '0', 'locked': '0'}]}] >>> [{'asset': 'ADD', 'free': '10', 'locked': '0'}]
解决方案
直接遍历snapshotVos中的每个条目,取出data里的balances数组,再对每个余额对象做过滤判断即可。代码如下:
# 假设原始数据存储在repo变量中 result = [] # 遍历snapshotVos里的每个快照项 for snapshot in repo['snapshotVos']: # 获取当前快照的balances数组 balances = snapshot['data']['balances'] # 遍历每个余额对象,过滤掉free和locked均为0的项 for balance in balances: # 原始数据中数值为字符串类型,直接做字符串比较即可 if balance['free'] != '0' or balance['locked'] != '0': result.append(balance) print(result)
运行结果:
[{'asset': 'ADD', 'free': '10', 'locked': '0'}, {'asset': 'SHIB', 'free': '0', 'locked': '947415'}]
代码说明
- 遍历
snapshotVos数组,逐个取出每个快照的data字段下的balances数组; - 对每个余额对象,判断
free和locked是否不全为'0'(若后续需要数值计算,可将字符串转成int/float类型); - 将符合条件的对象加入结果列表,最终得到保留目标键且过滤掉无效项的数据集。
内容的提问来源于stack exchange,提问作者salim
相关产品推荐
相关产品推荐

