多字典合并(含缺失值处理):按键整合为值列表
合并多个字典,按键收集对应值(缺失补None)
需求说明
现有多个字典,需将所有键对应的数值按字典顺序收集为列表,若某个字典中无该键,则对应位置补None(对应需求中的null)。比如:
- 输入字典:
a = {1:6, 2:7, 3:8}、b = {1:5, 3:9} - 期望输出:
{1:[6, 5], 2:[7, None], 3:[8, 9]}
通用解决方案(支持任意数量字典)
直接通过Python内置方法即可实现,步骤如下:
- 将所有待合并的字典存入一个列表
- 获取所有字典的键的并集,确保不遗漏任何键
- 遍历每个键,依次从每个字典中取值(无对应键则返回
None),组成列表作为结果字典的对应值
代码示例
# 示例字典 a = {1:6, 2:7, 3:8} b = {1:5, 3:9} d = {4:10, 2:11} # 可添加任意数量字典 # 存放所有待合并字典的列表 dict_list = [a, b, d] # 获取所有唯一键 all_keys = set.union(*map(dict.keys, dict_list)) # 构建结果字典 merged_dict = {key: [d.get(key, None) for d in dict_list] for key in all_keys} print(merged_dict) # 输出:{1: [6, 5, None], 2: [7, None, 11], 3: [8, 9, None], 4: [None, None, 10]}
保持键的顺序(可选)
如果需要键的顺序与它们在字典中首次出现的顺序一致,可使用OrderedDict(Python 3.7+也可直接用普通字典,因为默认保持插入顺序):
from collections import OrderedDict # 获取按首次出现顺序排列的所有键 all_keys = OrderedDict.fromkeys(k for d in dict_list for k in d).keys() # 构建有序结果字典 merged_dict = {key: [d.get(key, None) for d in dict_list] for key in all_keys} print(merged_dict) # 输出:{1: [6, 5, None], 2: [7, None, 11], 3: [8, 9, None], 4: [None, None, 10]}
内容的提问来源于stack exchange,提问作者Novinnam
相关产品推荐
相关产品推荐

