如何将嵌套列表转换为指定结构并确保数据索引对应关系?
问题:将嵌套列表转换为平级列表并保持索引对应
现有嵌套列表:
list_sample = [{'name': 'A', 'data': {'date':['2021-01-01', '2021-02-01', '2021-03-01'], 'credit_score':[800, 890, 895], 'spend':[1500, 25000, 2400], 'average_spend':5000}}, {'name': 'B', 'data': {'date':['2022-01-01', '2022-02-01', '2022-03-01'], 'credit_score':[2800, 390, 8900], 'spend':[15000, 5000, 400], 'average_spend':3000}}, {'name': 'C', 'data': {'date':['2022-01-01', '2022-02-01', '2022-03-01'], 'credit_score':[2800, 390, 8900], 'spend':[15000, 5000, 400], 'average_spend':3000}}]
需要转换为以下三个平级列表,且同一索引位置的元素必须来自同一数据源:
date = ['2021-01-01', '2021-02-01', '2021-03-01', '2022-01-01', '2022-02-01', '2022-03-01', '2022-01-01', '2022-02-01', '2022-03-01'] credit_score = [800, 890, 895, 2800, 390, 8900, 2800, 390, 8900] spend = [1500, 25000, 2400, 15000, 5000, 400, 15000, 5000, 400]
简洁实现方式
方法1:列表推导式(一行式)
通过嵌套遍历提取字段并拼接,代码简洁高效:
date = [d for item in list_sample for d in item['data']['date']] credit_score = [cs for item in list_sample for cs in item['data']['credit_score']] spend = [s for item in list_sample for s in item['data']['spend']]
方法2:循环扩展(可读性更强)
如果需要更清晰的执行逻辑,用循环逐个扩展列表:
date = [] credit_score = [] spend = [] for item in list_sample: user_data = item['data'] date.extend(user_data['date']) credit_score.extend(user_data['credit_score']) spend.extend(user_data['spend'])
两种方法均能严格保证索引对应:每个用户的date、credit_score、spend内部元素顺序不变,且按用户顺序依次拼接,因此同一索引的元素必然来自同一数据源的同一位置。
内容的提问来源于Stack Exchange,提问作者Lata
相关产品推荐
相关产品推荐

