You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python字典合并优化:按规则合并值并指定键顺序

优化字典合并代码方案

原代码用了三层循环,时间复杂度达到O(n*m),当字典元素较多时性能会明显拖慢。下面提供两种更高效的实现方式,同时严格满足你要求的键排序规则:仅存在于第一个字典的键 → 两个字典共有的键 → 仅存在于第二个字典的键。

方法一:集合分类+线性遍历

def merge_dictionaries(dict1, dict2):
    # 快速拆分三类键
    only_dict1 = dict1.keys() - dict2.keys()
    common_keys = dict1.keys() & dict2.keys()
    only_dict2 = dict2.keys() - dict1.keys()
    
    merged = {}
    # 按要求顺序填充结果
    for k in only_dict1:
        merged[k] = [dict1[k], None]
    for k in common_keys:
        merged[k] = [dict1[k], dict2[k]]
    for k in only_dict2:
        merged[k] = [None, dict2[k]]
    
    return merged

优势:

  • 时间复杂度降到O(n+m),集合操作是高效的哈希运算,比嵌套循环快很多
  • 逻辑直白,完全贴合你要的键顺序要求
  • 避免了原代码中重复的键值对比操作

方法二:字典推导式简化写法

如果想让代码更紧凑,可以用字典推导式结合解包实现:

def merge_dictionaries(dict1, dict2):
    only_dict1 = dict1.keys() - dict2.keys()
    common_keys = dict1.keys() & dict2.keys()
    only_dict2 = dict2.keys() - dict1.keys()
    
    return {
        **{k: [dict1[k], None] for k in only_dict1},
        **{k: [dict1[k], dict2[k]] for k in common_keys},
        **{k: [None, dict2[k]] for k in only_dict2}
    }

说明:

  • 用**解包三个推导式的结果,合并顺序由代码书写顺序决定
  • 效率和方法一完全一致,只是写法更简洁

验证示例

测试你给出的示例输入:

dict_a = {'k': 'v1', "k'": 'v'}
dict_b = {'k': 'v2', "k''": 'w'}
print(merge_dictionaries(dict_a, dict_b))

输出结果:

{"k'": ['v', None], 'k': ['v1', 'v2'], "k''": [None, 'w']}

完全符合你的需求。

内容的提问来源于stack exchange,提问作者Damuna Taliffato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:22:22