【问题标题】:How to merge 2 python dictionaries? [duplicate]如何合并2个python字典? [复制]
【发布时间】:2017-04-30 11:50:47
【问题描述】:

假设有 2 个字典:

A = {'a':1, 'b':2, 'c':3}
B = {'c':2, 'd':2, 'e':4}

如何将它们合并在一起以获得:

C = {'a':1, 'b':2, 'c':5, 'd':2, 'e':4}

我知道A.update(B) 会给我一个合并的字典,但是我想要的 A 中“c”的值将被 B 中的“c”持有的值覆盖,而不是被添加。

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    也许最简单的方法是使用Counter

    from collections import Counter
    
    A = {'a':1,'b':2,'c':3} 
    B = {'c':2,'d':2,'e':4}
    
    C = dict(Counter(A) + Counter(B))
    
    print(C)
    # {'a': 1, 'b': 2, 'c': 5, 'd': 2, 'e': 4}
    

    【讨论】:

      【解决方案2】:
      A = {'a':1, 'b':2, 'c':3}
      B = {'c':2, 'd':2, 'e':4}
      C = {}
      
      for key in A:
          C[key] = A[key] + B.get(key,0)
      
      for key in B:
          try:
              C[key]
          except:
              C[key] = B[key]
      
      print(C)
      

      因此您将获得所需的组合字典。

      【讨论】:

        【解决方案3】:

        您可以执行以下操作

        A = {'a':1,'b':2,'c':3}
        B = {'c':2,'d':2,'e':4}
        C = {}
        keys_from_a = A.keys()
        keys_from_b = B.keys()
        
        total_keys = keys_from_a + keys_from_b
        sort(total_keys)
        
        for k in total_keys:
             if A[k]:
                  C[k] = A[k]
             elif B[k]:
                  C[k] = B[k]
             else:
                  continue
        print(c)
        

        【讨论】:

        • 键无法真正添加。他们可以吗?
        • 我认为这不会产生预期的结果。此外,如果 k 不存在 A,A[k] 将引发 KeyError。因此,请使用 has_key(k) 或 .get(k)
        • 在更一般的情况下,您是对的,但如果您事先知道字典,那也没关系。 keys() 方法还返回所有键的列表
        • (1) keys() 只返回古代 Python 中的键列表。 (2) sort(total_keys) 将给出名称错误。 (3) 你实际上从来没有在这里做任何加法。
        • @MikeTung 该问题被标记为 python 3.6(我删除了该标记,因为该问题没有特定于 3.6 的内容)并且没有列出 keys()。所以:不,它们不能被添加。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-12
        • 1970-01-01
        • 2017-11-27
        • 2017-09-12
        • 2021-05-27
        相关资源
        最近更新 更多