如何从包含嵌套列表的dictionary中提取字段生成目标dictionary
问题原因
- 直接遍历
my_dict实际上只会遍历字典的键名(也就是只能拿到mc字符串),没有拿到对应存储数据的嵌套列表 - 每次直接用
=赋值会覆盖上一轮写入的值,不会做汇总存储,最终只保留最后一个元素的取值 - 存在语法错误:字符串索引的引号未闭合,还有提取
turnInPlayEnabled时字段名多写了前缀i,拼写错误会导致取值报错
正确实现
基础写法
# 初始化新字典,每个目标键对应空列表用来汇总数据 new_dict = { 'id': [], 'bspMarket': [], 'turnInPlayEnabled': [], 'persistenceEnabled': [], 'marketBaseRate': [], 'eventId': [], 'eventTypeId': [], 'numberOfWinners': [], 'bettingType': [] } # 遍历mc对应的嵌套列表 for sub_list in my_dict['mc']: item = sub_list[0] # 提取id字段 new_dict['id'].append(item['id']) market_def = item['marketDefinition'] # 提取marketDefinition下的字段 new_dict['bspMarket'].append(market_def['bspMarket']) new_dict['turnInPlayEnabled'].append(market_def['turnInPlayEnabled']) new_dict['persistenceEnabled'].append(market_def['persistenceEnabled']) new_dict['marketBaseRate'].append(market_def['marketBaseRate']) new_dict['eventId'].append(market_def['eventId']) new_dict['eventTypeId'].append(market_def['eventTypeId']) new_dict['numberOfWinners'].append(market_def['numberOfWinners']) new_dict['bettingType'].append(market_def['bettingType'])
如果不需要全部字段,删掉对应声明和追加逻辑即可。
灵活拓展写法
不需要手动写每个字段的追加逻辑,调整字段列表即可适配需求:
# 声明所有需要提取的字段 target_fields = ['id', 'bspMarket', 'turnInPlayEnabled', 'persistenceEnabled', 'marketBaseRate', 'eventId', 'eventTypeId', 'numberOfWinners', 'bettingType'] new_dict = {field: [] for field in target_fields} for sub_list in my_dict['mc']: item = sub_list[0] market_def = item['marketDefinition'] for field in target_fields: # id字段在第一层字典,其余在marketDefinition下 val = item[field] if field == 'id' else market_def[field] new_dict[field].append(val)
内容的提问来源于stack exchange,提问作者chuky pedro
相关产品推荐
相关产品推荐

