Python实现从复杂字典中按key查找指定账户及余额
通用提取指定账户信息的实现方案
核心思路
抛弃硬编码索引的方式,改用按账户唯一标识(如账户ID、名称)匹配的逻辑遍历JSON结构——不管新增多少账户,只要传入目标账户的标识,就能自动定位并提取所需字段。
基础场景实现(单层账户数组)
假设接口返回的JSON中,账户数据是顶层数组(比如response.json()['accounts']),Python代码示例:
import requests def extract_account_data(target_identifier, json_data, match_key="accountId"): """ 提取指定账户的glCode和openingBalance :param target_identifier: 要查找的账户标识(如ID、名称) :param json_data: 接口返回的完整JSON字典 :param match_key: 用于匹配账户的字段名,按需替换(比如'accountName') :return: 包含目标字段的字典,未找到则返回空字典 """ for account in json_data.get("accounts", []): if account.get(match_key) == target_identifier: return { "glCode": account.get("glCode"), "openingBalance": account.get("openingBalance") } return {} # 发起请求获取数据 resp = requests.get("你的接口地址") raw_data = resp.json() # 使用示例:提取ID为"ACC-001"的账户信息 target_account = extract_account_data("ACC-001", raw_data) print(target_account)
复杂嵌套场景适配(递归遍历)
如果JSON存在多层嵌套(比如账户按部门分组嵌套),用递归遍历实现全域查找:
def recursive_find_account(target_key, target_val, current_node): # 检查当前节点是否是目标账户 if isinstance(current_node, dict): if current_node.get(target_key) == target_val: return { "glCode": current_node.get("glCode"), "openingBalance": current_node.get("openingBalance") } # 递归遍历所有子节点 for val in current_node.values(): result = recursive_find_account(target_key, target_val, val) if result: return result # 处理数组类型的节点,遍历每个元素 elif isinstance(current_node, list): for item in current_node: result = recursive_find_account(target_key, target_val, item) if result: return result return {} # 使用示例:按账户名称查找 target_account = recursive_find_account("accountName", "市场部对公账户", raw_data)
方案优势
- 无需修改核心逻辑:新增账户时,仅需传入对应的标识参数即可
- 兼容结构变化:不管JSON层级、数组顺序如何调整,只要账户对象包含匹配字段和目标字段就能正常工作
- 复用性强:可以把提取逻辑封装成工具函数,在多个业务场景中调用
内容的提问来源于stack exchange,提问作者Patrakov Kostiantyn
相关产品推荐
相关产品推荐

