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

Python合并字典时排除重复值:能否用|或**语法实现?

合并字典:同键列表去重合并的实现方案

直接使用|运算符或(**dict1, **dict2)解包语法无法直接实现你要的逻辑——这两种方式的核心规则是「键冲突时,后一个字典的值直接覆盖前一个」,不会对同键对应的列表做合并去重操作,这也是你用|时得到覆盖结果的原因。

不过你可以基于字典推导式,结合这两种语法的思路,实现符合需求的合并逻辑,同时避免修改原字典(你的原函数会直接修改dict1,新方案更安全):

基础实现(不保证元素顺序)

利用集合去重,代码简洁但会打乱列表原有顺序:

def dict_merge(dict1, dict2):
    # 获取所有唯一键
    all_keys = dict1.keys() | dict2.keys()
    return {
        key: list(set(dict1.get(key, []) + dict2.get(key, [])))
        for key in all_keys
    }

测试示例:

  • 输入dict_merge({'A': [1, 2, 3]}, {'A': [2, 3, 4]}),输出{'A': [1, 2, 3, 4]}(顺序可能因集合特性略有不同)
  • 输入dict_merge({'A': [1, 2, 3]}, {'B': [2, 4, 5, 6]}),输出{'A': [1, 2, 3], 'B': [2, 4, 5, 6]}

保留元素顺序的实现

如果需要保留列表元素的原有顺序,可以自定义合并逻辑:

def dict_merge(dict1, dict2):
    all_keys = dict1.keys() | dict2.keys()
    
    def merge_unique(l1, l2):
        merged = l1.copy()
        for item in l2:
            if item not in merged:
                merged.append(item)
        return merged
    
    return {
        key: merge_unique(dict1.get(key, []), dict2.get(key, []))
        for key in all_keys
    }

测试示例:

  • 输入dict_merge({'A': [1, 2, 3]}, {'A': [2, 3, 4]}),输出{'A': [1, 2, 3, 4]},顺序完全保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:50:27