Merging of two dictionaries

This question already has an answer here:

  • How to merge two dictionaries in a single expression? 48 answers

  • I want to merge these two dictionaries and the result should be as follows:

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

    how can I achieve this in python?

    You can't. You can only have one value per key in a Python dict. What you can do is to have a list or a set as the value.

    Here is an example with a set:

    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)
    

    This will give you d3 :

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

    You can also do this with a list (possibly closer to your example):

    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)
    

    You'll get this:

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

    However, looking at {'a':1,'b':2,'c':3,'b':2,'c':3,'d':1} (which can't be a dict), it seems that you're after a different data structure altogether. Perhaps something like this:

    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 ]
    

    This would produce this, which looks closer to the data structure you had in mind initially:

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

    You may want to try:

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

    Here, we're creating an empty dictionary D3 first, then update it from the two other dictionaries.

    Note that you need to be careful with the order of the updates: if D2 shares some keys with D1 , the code above will overwrite the corresponding entries of D1 with those of D2 .

    Note as well that the keys will not be repeated. The example you give D3={a:1,b:2,c:3,b:2,c:3,d:1} is not a valid dictionary.


    Dictionaries by definition can't have duplicate keys, so "merging" dictionaries will actually give the following result (note the order is arbitrary):

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

    You can create a clone of one of the dictionaries and merge the entries from the other into it:

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

    or you can create a new dictionary from the concatenation of the (key, value) tuples from each input dictionary:

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

    If you really want multiple values for duplicate keys, you need something like a list of values for each key:

    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/17564.html

    上一篇: python:通过相同的键值合并字典

    下一篇: 合并两本字典