You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 00:10:11