How to merge multiple dicts with same key or different key? How to merge multiple dicts with same key or different key? python-3.x python-3.x

How to merge multiple dicts with same key or different key?


Here's a general solution that will handle an arbitrary amount of dictionaries, with cases when keys are in only some of the dictionaries:

from collections import defaultdictd1 = {1: 2, 3: 4}d2 = {1: 6, 3: 7}dd = defaultdict(list)for d in (d1, d2): # you can list as many input dicts as you want here    for key, value in d.items():        dd[key].append(value)print(dd)

Shows:

defaultdict(<type 'list'>, {1: [2, 6], 3: [4, 7]})

Also, to get your .attrib, just change append(value) to append(value.attrib)


assuming all keys are always present in all dicts:

ds = [d1, d2]d = {}for k in d1.iterkeys():    d[k] = tuple(d[k] for d in ds)

Note: In Python 3.x use below code:

ds = [d1, d2]d = {}for k in d1.keys():  d[k] = tuple(d[k] for d in ds)

and if the dic contain numpy arrays:

ds = [d1, d2]d = {}for k in d1.keys():  d[k] = np.concatenate(list(d[k] for d in ds))


Here is one approach you can use which would work even if both dictonaries don't have same keys:

d1 = {'a':'test','b':'btest','d':'dreg'}d2 = {'a':'cool','b':'main','c':'clear'}d = {}for key in set(d1.keys() + d2.keys()):    try:        d.setdefault(key,[]).append(d1[key])            except KeyError:        pass    try:        d.setdefault(key,[]).append(d2[key])              except KeyError:        passprint d

This would generate below input:

{'a': ['test', 'cool'], 'c': ['clear'], 'b': ['btest', 'main'], 'd': ['dreg']}