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

如何将值为列表的Python字典转换为字典列表?

问题:将值为列表的字典转换为字典列表

现有如下Python字典,其值均为列表:

users = {'first-name': ['Jim', 'John', 'Jane'], 'last-name': ['Boothe', 'Smith', 'Doe'], 'user': ['100', '101', '102']}

希望将该字典转换为字典列表,每个子字典对应原字典列表中相同索引的键值对,最终得到:

payload = [
    {'first-name': 'Jim', 'last-name': 'Boothe', 'user': '100'},
    {'first-name': 'John', 'last-name': 'Smith', 'user': '101'},
    {'first-name': 'Jane', 'last-name': 'Doe', 'user': '102'}
]

目前已实现生成第一个子字典,但不清楚如何循环处理剩余索引,现有代码如下:

users = {'first-name': ['Jim', 'John', 'Jane'], 'last-name': ['Boothe', 'Smith', 'Doe'], 'user': ['100', '101', '102']}

for k in users:
    dict[k] = users[k][0]
    payload = [dict]
print(payload)

输出为:

[{'user': '100', 'first-name': 'Jim', 'last-name': 'Boothe'}]

解决方案

方法1:通过索引循环构建

先确定值列表的长度(假设所有值列表长度一致),然后遍历每个索引,为每个索引生成对应的子字典:

users = {'first-name': ['Jim', 'John', 'Jane'], 'last-name': ['Boothe', 'Smith', 'Doe'], 'user': ['100', '101', '102']}
payload = []
# 获取列表长度,取第一个键对应的列表长度即可
list_length = len(next(iter(users.values())))

for i in range(list_length):
    sub_dict = {}
    for key in users:
        sub_dict[key] = users[key][i]
    payload.append(sub_dict)

print(payload)

方法2:使用zip和字典推导式(更简洁)

利用zip将所有值列表按索引打包,再结合字典推导式快速生成子字典:

users = {'first-name': ['Jim', 'John', 'Jane'], 'last-name': ['Boothe', 'Smith', 'Doe'], 'user': ['100', '101', '102']}
keys = users.keys()
payload = [dict(zip(keys, values)) for values in zip(*users.values())]

print(payload)

逻辑说明:

  • zip(*users.values())会把每个值列表的对应索引元素打包成元组,比如('Jim', 'Boothe', '100')、('John', 'Smith', '101')
  • 对每个元组,用dict(zip(keys, values))将键和对应值配对成字典,最终生成目标列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:32:11