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

Python中筛选嵌套字典列表,根据指定键值获取目标值

解决方法

首先,你之前的代码错误在于没有访问外层的'S_RAF'键,正确的硬编码索引写法应该是:

a[2]['S_RAF']['C_C106']['D_1104']

但这种写法依赖元素在列表中的固定位置,一旦数据顺序变化就会失效,最优的实现是通过遍历查找匹配项:

方法1:循环遍历(直观易懂)

a = [
    {'S_RAF': {'C_C106': {'D_1103': 'AVE', 'D_1104': '3-AB3242'}}},
    {'S_RAF': {'C_C106': {'D_1103': 'OI', 'D_1104': '31503302130'}}},
    {'S_RAF': {'C_C106': {'D_1103': 'PQ', 'D_1104': 'IBAN3102495934895'}}}
]

target_value = None
for item in a:
    inner_dict = item['S_RAF']['C_C106']
    if inner_dict['D_1103'] == 'PQ':
        target_value = inner_dict['D_1104']
        break  # 找到第一个匹配项后停止遍历

print(target_value)  # 输出 IBAN3102495934895

方法2:生成器表达式(简洁高效)

如果只需要第一个匹配的结果,用生成器表达式可以一行完成:

target_value = next(
    item['S_RAF']['C_C106']['D_1104']
    for item in a
    if item['S_RAF']['C_C106']['D_1103'] == 'PQ'
)
print(target_value)

如果担心没有匹配项会抛出StopIteration,可以添加默认值:

target_value = next(
    (item['S_RAF']['C_C106']['D_1104'] for item in a if item['S_RAF']['C_C106']['D_1103'] == 'PQ'),
    None  # 没有匹配时返回None
)

方法3:处理可能的键缺失(鲁棒性更强)

如果数据中可能存在键缺失的情况,比如某个item没有'S_RAF'或'C_C106',可以用dict.get()避免报错:

target_value = None
for item in a:
    c106_dict = item.get('S_RAF', {}).get('C_C106', {})
    if c106_dict.get('D_1103') == 'PQ':
        target_value = c106_dict.get('D_1104')
        break

内容的提问来源于stack exchange,提问作者Pythonista

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:50:22