Python 3.9如何将dict1按键值对两两分组合并到dict2中
Python 3.9 字典分组填充实现方案
前置条件
- 运行环境:Python 3.9
- 初始定义的两个字典:
dict1 = {'ZS': [1, 2], 'ZP': [3], 'XS': [4, 5], 'XP': [6, 7]} dict2 = {'a': {}, 'b': {}}
- 目标:将
dict1的键值对按插入顺序每2个分为一组,依次作为dict2对应键的值,最终得到结构如下的结果:
result_dict = {'a': {'ZS': [1, 2], 'ZP': [3]}, 'b' : {'XS': [4, 5], 'XP': [6, 7]}}
实现思路
Python 3.7及以上版本的字典默认保留插入顺序,3.9版本完全支持该特性,不需要额外引入有序字典类,直接按顺序遍历dict1的键值对做批次拆分,再和dict2的键一一对应赋值即可。
可运行代码
写法1:迭代器逐次取值(适配dict1长度不固定场景)
这种写法不需要提前计算dict1的长度,就算dict1的键值对总数不是2的整数倍也能正常处理,不会抛出索引错误:
# 将dict1的键值对转为迭代器 item_iter = iter(dict1.items()) result_dict = dict2.copy() # 不想修改原dict2可以保留这行,不需要可删除 for target_key in result_dict: sub_items = {} # 每次取2个键值对 for _ in range(2): try: k, v = next(item_iter) sub_items[k] = v except StopIteration: break result_dict[target_key] = sub_items print(result_dict)
写法2:切片批量分组(代码更简洁)
如果确定dict1的键值对数量刚好可以按2个一组全部分配给dict2的键,可以用列表切片的方式写得更简洁:
# 拆分dict1为每2个键值对一组的子字典列表 item_groups = [] all_items = list(dict1.items()) for i in range(0, len(all_items), 2): item_groups.append(dict(all_items[i:i+2])) # 和dict2的键按顺序配对生成结果 result_dict = dict(zip(dict2.keys(), item_groups)) print(result_dict)
两种写法运行后输出的结果和需求给出的目标结构完全一致。
内容的提问来源于stack exchange,提问作者Zenith_1024
相关产品推荐
相关产品推荐

