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

如何从含不同长度列表值的字典生成同索引元素组成的字典列表?

解决字典中不等长列表生成对应字典列表的问题

你猜的完全正确!问题根源就是各列表长度不一致——Python内置的zip()函数会以最短的可迭代对象为基准截断所有序列,你的job列表只有1个元素,所以最终只生成了1个字典。

要实现你想要的效果,我们可以借助itertools模块里的zip_longest(),它会遍历到最长的序列结束,缺失的位置默认用None填充。之后只需要在生成字典时过滤掉值为None的键值对即可:

from itertools import zip_longest

d = {'name': ['bob', 'john', 'harry', 'mary'], 'age': [13, 19, 23], 'height': [164, 188], 'job': ['programmer']}

# 生成目标字典列表
d2 = [
    {key: value for key, value in zip(d.keys(), item) if value is not None}
    for item in zip_longest(*d.values())
]

print(d2)

运行这段代码后,输出完全符合你的期望:

[
    {'name': 'bob', 'age': 13, 'height': 164, 'job': 'programmer'},
    {'name': 'john', 'age': 19, 'height': 188},
    {'name': 'harry', 'age': 23},
    {'name': 'mary'}
]

简单解释下逻辑:

  • zip_longest(*d.values())会按索引把所有列表的元素配对,比如第四个配对结果是('mary', None, None, None)
  • 内层的字典推导式会过滤掉值为None的项,这样没有对应值的键就不会出现在最终的字典里

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:34:18