如何将值为列表的字典转换为元素一一对应的字典列表?
将字典中对应位置的元素组合为列表字典
给定一个字典,其中每个键对应的值都是长度相同的列表,需要把每个位置上的元素按键组合成单个字典,最终将所有这些字典存入一个新列表。
示例输入
my_dict = {'Folder': ['2021-03-12_020000', '2021-03-12_020000', '2021-03-12_020000'], 'Filename': ['2021-03-12_020000-frame79.jpg', '2021-03-12_020000-frame1.jpg', '2021-03-12_020000-frame39.jpg'], 'Labeler': ['Labeler 2', 'Labeler 2', 'Labeler 1']}
期望输出
final_list = [{'Folder':'2021-03-12_020000', 'Filename': '2021-03-12_020000-frame79.jpg', 'Labeler': 'Labeler 2'}, {'Folder':'2021-03-12_020000', 'Filename': '2021-03-12_020000-frame1.jpg', 'Labeler': 'Labeler 2'}, {'Folder':'2021-03-12_020000', 'Filename': '2021-03-12_020000-frame39.jpg', 'Labeler': 'Labeler 1'}]
解决方案
可以用zip()函数把各个键对应的列表按位置打包,再结合列表推导式生成目标列表:
final_list = [dict(zip(my_dict, values)) for values in zip(*my_dict.values())]
说明
zip(*my_dict.values())会把每个键对应的列表按索引位置打包,比如第一个元组包含三个列表的第一个元素,第二个元组包含三个列表的第二个元素,以此类推。- 对每个打包后的元组,
dict(zip(my_dict.keys(), 元组))会把键和对应位置的元素组合成字典。 - 列表推导式遍历所有打包后的元组,生成最终的字典列表。
内容的提问来源于stack exchange,提问作者Jared
相关产品推荐
相关产品推荐

