Python中合并两个字典 相同键拼接值非共有键补0如何实现
Python合并字典实现方案
核心实现思路
先获取两个字典的所有唯一键,遍历每个键分别从两个字典取值,缺失值用字符串'0'补全,最后组装成列表作为新字典的值即可。
基础实现(适合初学者理解)
# 示例字典 d1 = {'David': '5.5', 'John': '1.0', 'Tim' : '2' } d2 = {'David': '42.5', 'John': '37.0'} # 格式化函数,匹配示例中去掉.0后缀的需求 def format_num_str(s): if s.endswith('.0'): return s[:-2] return s # 拿到两个字典的所有唯一键 all_unique_keys = d1.keys() | d2.keys() d3 = {} for key in all_unique_keys: # get方法第二个参数为找不到键时的默认返回值 val_from_d1 = d1.get(key, '0') val_from_d2 = d2.get(key, '0') # 格式化后存入列表 d3[key] = [format_num_str(val_from_d1), format_num_str(val_from_d2)]
运行后输出d3即为要求的结果:{'David': ['5.5', '42.5'], 'John': ['1.0', '37'], 'Tim': ['2', '0']}
简洁写法(字典推导式)
不需要额外格式化的场景可以直接一行实现:
d3 = {k: [d1.get(k, '0'), d2.get(k, '0')] for k in d1.keys() | d2.keys()}
需要格式化的话套入格式化函数即可:
d3 = {k: [format_num_str(d1.get(k, '0')), format_num_str(d2.get(k, '0'))] for k in d1.keys() | d2.keys()}
注意事项
- 如果你后续需要对值做数值运算,把默认补全值改成数字
0,取出值后转成int/float类型即可 d1.keys() | d2.keys()是集合求并集的写法,兼容Python3.0以上所有版本,Python3.9+也可以用(d1 | d2).keys()获取所有唯一键
内容的提问来源于stack exchange,提问作者Murali
相关产品推荐
相关产品推荐

