如何将值为列表的单个字典转换为对应字典列表
字典转字典列表实现方案
如果你使用的是Python 3.7及以上版本(字典默认保留插入顺序),可以直接用以下一行代码实现需求:
only_dict = {'First': [1, 2], 'Second': [3, 4]} out_lst = [dict(zip(only_dict.keys(), val_group)) for val_group in zip(*only_dict.values())]
逻辑说明
- 首先通过
zip(*only_dict.values())将原字典中所有值列表的同位置元素打包为元组,示例中会生成(1, 3)、(2, 4)两组值 - 遍历每组值,和原字典的键通过
zip()配对后转换为字典,最终生成目标列表
其他可选实现
如果你已经安装了pandas库,处理大规模数据时可以用更简洁的写法:
import pandas as pd out_lst = pd.DataFrame(only_dict).to_dict('records')
注意事项
- 上述方案默认原字典中所有值列表的长度一致,如果存在长度不一致的情况,
zip()会自动截断到最短列表的长度 - 如果你需要保留所有长度的元素,可以用
itertools.zip_longest替代zip,通过fillvalue参数指定缺省值:
from itertools import zip_longest out_lst = [dict(zip(only_dict.keys(), val_group)) for val_group in zip_longest(*only_dict.values(), fillvalue=None)]
- 如果使用Python 3.7以下版本,字典键不保证有序,建议先显式定义键的顺序再做转换:
keys = ['First', 'Second'] out_lst = [dict(zip(keys, val_group)) for val_group in zip(*[only_dict[k] for k in keys])]
内容的提问来源于stack exchange,提问作者swisscheese_95
相关产品推荐
相关产品推荐

