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
相关产品推荐
相关产品推荐

