如何从Python嵌套列表的嵌套字典中提取指定键值对
提取嵌套列表中的
ticker键值对 原始数据
data_list = [ [{'data': [{'figi': 'BBG00ZTHB2X0', 'name': 'AMERISOURCEBERGEN CORP', 'ticker': 'ABC 0.737 03/15/23', 'exchCode': 'NEW YORK', 'compositeFIGI': None, 'uniqueID': None, 'securityType': 'GLOBAL', 'marketSector': 'Corp', 'shareClassFIGI': None, 'uniqueIDFutOpt': None, 'securityType2': 'Corp', 'securityDescription': 'ABC 0.737 03/15/23'}]}], [{'error': 'No identifier found.'}], [{'error': 'No identifier found.'}] ]
尝试的代码及无效结果
尝试代码:
keys_to_retain = ['ticker'] print([{key: d[key] for key in keys_to_retain if key in d} for d in data_list])
输出结果:
[{}, {}, {}]
问题根源
你的代码直接遍历外层列表的元素,但外层列表的每个元素是子列表,而非包含ticker的字典;而且ticker实际藏在data键对应的子列表里,层级嵌套没处理到位,自然找不到目标键。
解决方法及代码
需要逐层拆解嵌套结构,按层级遍历:
- 遍历外层列表的每个子列表
- 遍历子列表中的字典,判断是包含
data还是error - 若为
data,继续遍历其下的子字典,提取ticker;若为error可选择跳过或保留
提取ticker的核心代码
keys_to_retain = ['ticker'] result = [] for sub_list in data_list: for item in sub_list: if 'data' in item: for entry in item['data']: ticker_entry = {k: entry[k] for k in keys_to_retain if k in entry} if ticker_entry: result.append(ticker_entry) print(result)
输出结果
[{'ticker': 'ABC 0.737 03/15/23'}]
(可选)保留所有条目(含error提示)
如果需要同时保留error信息,修改代码如下:
keys_to_retain = ['ticker'] result = [] for sub_list in data_list: for item in sub_list: if 'data' in item: for entry in item['data']: ticker_entry = {k: entry[k] for k in keys_to_retain if k in entry} if ticker_entry: result.append(ticker_entry) elif 'error' in item: result.append({'error': item['error']}) print(result)
对应的输出:
[{'ticker': 'ABC 0.737 03/15/23'}, {'error': 'No identifier found.'}, {'error': 'No identifier found.'}]
内容的提问来源于stack exchange,提问作者Yogita Negi
相关产品推荐
相关产品推荐

