Python如何将值为等长列表的字典转换为按索引分组的嵌套列表
字典转指定嵌套列表的Python实现方案
你的原始数据是按字段维度存储的字典结构,每个键对应一整列的取值,要转成按行存储的嵌套列表,核心逻辑是对齐三个值列表的索引位置,把同一行的三个元素拼接为子列表,以下是两种常用实现方式:
- 方式一:zip函数快速实现(推荐,代码最简洁)
zip可以并行遍历多个可迭代对象,按位置将对应元素打包为元组,只需要把打包得到的每个元组转为列表,就能得到目标结构:
# 原始字典 raw_data = {'id':[0, 1, 2, 3, 4, 5], 'code':['A1', 'A2', 'A3', 'A4', 'A5', 'A6'], 'price':['35', '23', '54', '17', '68', '199'] } # 转换 data = [list(row) for row in zip(raw_data['id'], raw_data['code'], raw_data['price'])]
如果你的Python版本是3.7及以上(字典默认保留插入顺序),可以直接用值解包的写法,不用手动枚举每个键:data = [list(row) for row in zip(*raw_data.values())]
- 方式二:索引遍历实现(逻辑直白,适合新手理解)
如果对内置函数不熟悉,可以直接通过索引循环取值,逐行拼接子列表,逻辑完全透明:
raw_data = {'id':[0, 1, 2, 3, 4, 5], 'code':['A1', 'A2', 'A3', 'A4', 'A5', 'A6'], 'price':['35', '23', '54', '17', '68', '199'] } data = [] # 以id列表长度为总循环次数(三个列表长度一致) for idx in range(len(raw_data['id'])): current_row = [ raw_data['id'][idx], raw_data['code'][idx], raw_data['price'][idx] ] data.append(current_row)
两种方式运行后得到的data结构完全匹配你的需求:
[ [0, 'A1', '35'], [1, 'A2', '23'], [2, 'A3', '54'], [3, 'A4', '17'], [4, 'A5', '68'], [5, 'A6', '199'] ]
注意:如果原始字典里三个值列表长度不一致,
zip会自动按最短列表截断结果,索引遍历会触发下标越界报错,转换前建议先校验三个列表长度相等,避免脏数据导致结果异常。
内容的提问来源于stack exchange,提问作者TheNerdy97
相关产品推荐
相关产品推荐

