如何从包含列表的字典生成多个键值对应字典?
解决方案:将含列表的字典拆分为多个单条目字典
这个需求在批量数据处理里挺常见的,用Python可以通过zip()函数结合列表推导式轻松搞定,给你两种实用思路:
针对固定键的直接写法
如果你的字典就固定是user和udp这两个键,直接配对对应列表的元素就行:
# 原始字典 original_dict = {'user': ['BEBR', 'FRPA', 'GEMU'], 'udp': ['COLT_BE_8845-udp', 'COLT_FR_8845-udp', 'COLT_DE_8845-udp']} # 生成目标列表 result = [{'user': user_val, 'udp': udp_val} for user_val, udp_val in zip(original_dict['user'], original_dict['udp'])] # 输出结果 print(result)
运行后就能得到你想要的格式:
[{'user': 'BEBR', 'udp': 'COLT_BE_8845-udp'}, {'user': 'FRPA', 'udp': 'COLT_FR_8845-udp'}, {'user': 'GEMU', 'udp': 'COLT_DE_8845-udp'}]
通用写法(适配任意数量的键)
如果之后字典可能新增更多键(比如再加个tcp列表),用下面的方法更灵活,不用修改推导式结构:
original_dict = {'user': ['BEBR', 'FRPA', 'GEMU'], 'udp': ['COLT_BE_8845-udp', 'COLT_FR_8845-udp', 'COLT_DE_8845-udp']} # 通用生成方式 result = [dict(zip(original_dict.keys(), item_pair)) for item_pair in zip(*original_dict.values())] print(result)
原理说明
zip(*original_dict.values())会把字典中所有列表的对应位置元素打包成元组,比如第一个元组就是('BEBR', 'COLT_BE_8845-udp')- 再用
dict(zip(original_dict.keys(), item_pair))把每个元组和字典的键一一对应,生成单个条目字典
不管字典有多少个键,只要每个键对应的列表长度一致,都能正确生成目标列表,非常适合后续扩展场景。
内容的提问来源于stack exchange,提问作者user7478971
相关产品推荐
相关产品推荐

