如何从含不同长度列表值的字典生成同索引元素组成的字典列表?
解决字典中不等长列表生成对应字典列表的问题
你猜的完全正确!问题根源就是各列表长度不一致——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
相关产品推荐
相关产品推荐

