合并两本字典

这个问题在这里已经有了答案:

  • 如何在单个表达式中合并两个字典? 48个答案

  • 我想合并这两个字典,结果应如下所示:

    D3 = { 'A':1, 'B':2, 'C':3, 'B':2, 'C':3, 'd':1}

    我怎么能在Python中实现这一点?

    你不能。 在Python字典中,每个键只能有一个值。 你可以做的是有一个列表或一组作为价值。

    以下是一个例子:

    d1 = { 'a': 1, 'b': 2, 'c': 3 }
    d2 = { 'a': 1, 'b': 5, 'd': 4 }
    d3 = {}
    def add_dict(target, d):
        for key in d:
            target.setdefault(key, set([])).add(d[key])
    
    add_dict(d3, d1)
    add_dict(d3, d2)
    

    这会给你d3

    {'a': set([1]), 'c': set([3]), 'b': set([2, 5]), 'd': set([4])}
    

    你也可以用一个列表来做到这一点(可能更接近你的例子):

    d1 = { 'a':1, 'b':2, 'c': 3}
    d2 = { 'b':2 ,'c':3, 'd': 1}
    d3 = {}
    def add_dict(target, d):
        for key in d:
            target.setdefault(key, []).append(d[key])
    
    add_dict(d3, d1)
    add_dict(d3, d2)
    

    你会得到这个:

    {'a': [1], 'c': [3, 3], 'b': [2, 2], 'd': [1]}
    

    然而,看着{'a':1,'b':2,'c':3,'b':2,'c':3,'d':1} (这不能是字典) ,看起来你完全是在一个不同的数据结构之后。 也许是这样的:

    d1 = { 'a':1, 'b':2, 'c': 3}
    d2 = { 'b':2 ,'c':3, 'd': 1}
    result = []
    
    result += [ { 'key': key, 'value': d1[key] } for key in d1 ]
    result += [ { 'key': key, 'value': d2[key] } for key in d2 ]
    

    这会产生这个,看起来更接近你最初想到的数据结构:

    [ {'value': 1, 'key': 'a'},
      {'value': 3, 'key': 'c'},
      {'value': 2, 'key': 'b'},
      {'value': 3, 'key': 'c'},
      {'value': 2, 'key': 'b'},
      {'value': 1, 'key': 'd'} ]
    

    你可能想尝试:

    D3 = {}
    D3.update(D1)
    D3.update(D2)
    

    在这里,我们首先创建一个空字典D3 ,然后从其他两个字典中更新它。

    请注意,您需要注意更新顺序:如果D2D1共享一些密钥,则上面的代码将用D2的相应条目覆盖D1的相应条目。

    还要注意,钥匙不会重复。 您给D3={a:1,b:2,c:3,b:2,c:3,d:1}不是有效的字典。


    按照定义,字典不能有重复的键,所以“合并”字典实际上会给出以下结果(注意顺序是任意的):

    {'a': 1, 'b': 2, 'c': 3, 'd': 1}
    

    您可以创建其中一个词典的克隆,并将其他词条合并到其中:

    D3 = dict(D1)
    D3.update(D2)
    

    或者你可以从每个输入字典的(键,值)元组的连接中创建一个新的字典:

    D3 = dict(D1.items() + D2.items())
    

    如果您确实需要重复键的多个值,则需要类似每个键的值列表:

    from itertools import groupby
    dict(( (key, [v for k, v in group]) for key, group in groupby(sorted(D1.items() + D2.items()), lambda x: x[0])))
    
    链接地址: http://www.djcxy.com/p/17563.html

    上一篇: Merging of two dictionaries

    下一篇: Union of dictionaries python