You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:如何从多个有序对应值列表创建字典列表

问题描述

有多组顺序对齐的数据列表,例如存储年龄的ages、存储姓名的names、存储性别的genders等,所有列表同索引位置的记录对应同一个人物。需要以最Pythonic的方式基于这些列表生成由字典组成的列表,目前仅能实现单列表的转换,无法适配多列表场景。

当前实现代码:

ages = [20, 21, 30]
names = ["Jhon", "Daniel", "Rob"]
list_of_dicts = [{"age": value} for value in ages]

当前代码运行输出:

[{'age': 20}, {'age': 21}, {'age': 30}]

期望输出结果:

[{'age': 20, 'name': 'Jhon'}, {'age': 21, 'name': 'Daniel'}, {'age': 30, 'name': 'Rob'}]
实现方案

最简洁符合Python风格的写法是使用内置函数zip()并行遍历多个对齐的列表,直接在列表推导式中组装对应字典:

ages = [20, 21, 30]
names = ["Jhon", "Daniel", "Rob"]
list_of_dicts = [{"age": age, "name": name} for age, name in zip(ages, names)]

如果后续需要扩展更多字段,比如新增性别列表,只需要把对应列表传入zip(),同步补充字典的键值映射即可:

genders = ["male", "male", "male"]
list_of_dicts = [
    {"age": age, "name": name, "gender": gender}
    for age, name, gender in zip(ages, names, genders)
]

如果字段数量很多,不想重复手写键值配对,可以提前把字段名和对应列表做绑定,批量生成结果,扩展性更强:

# 按顺序配置字段名和对应的数据列表
field_config = [
    ("age", ages),
    ("name", names),
    ("gender", genders)
]
field_names = [item[0] for item in field_config]
field_datas = [item[1] for item in field_config]
list_of_dicts = [dict(zip(field_names, row)) for row in zip(*field_datas)]

补充说明:默认zip()会以长度最短的列表为基准截断遍历,如果各列表长度不一致建议提前做长度校验,避免数据丢失。如果需要以最长列表为基准遍历、缺失位置自动填充空值,可以替换使用itertools.zip_longest()。

内容的提问来源于stack exchange,提问作者Rasv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:27:17