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
相关产品推荐
相关产品推荐

