Python merge list of dictionaries with same keys code example

Example 1: merge a list of dictionaries python

>>> from collections import ChainMap
>>> a = [{'a':1},{'b':2},{'c':1},{'d':2}]
>>> dict(ChainMap(*a))
{'b': 2, 'c': 1, 'a': 1, 'd': 2}

Example 2: python merge dictionaries

dict1 = {'color': 'blue', 'shape': 'square'}
dict2 = {'color': 'red', 'edges': 4}

dict1.update(dict2) #if a key exists in both, it takes the value of the second dict
# dict1 = {'color': 'red', 'shape': 'square', 'edges': 4}
# dict2 is left unchanged

Example 3: python merge dictionaries

# Python >= 3.5:
def merge_dictionaries(a, b):
   return {**a, **b}
  
# else:
def merge_dictionaries(a, b):
    c = a.copy()   # make a copy of a 
    c.update(b)    # modify keys and values of a with the b ones
    return c

a = { 'x': 1, 'y': 2}
b = { 'y': 3, 'z': 4}
print(merge_dictionaries(a, b)) 		# {'y': 3, 'x': 1, 'z': 4}

Example 4: how to merge a list of dictionaries in python

from collections import defaultdict
dict_list = {
	1: [{
			"x": "test_1",
			"y": 1
		},
		{
			"x": "test_2",
			"y": 1
		}, {
			"x": "test_1",
			"y": 2
		}
	],
}
print(dict_list) # {1: [{'x': 'test_1', 'y': 1}, {'x': 'test_2', 'y': 1}, {'x': 'test_1', 'y': 2}]}

data = dict()
for key, value in dict_list.items():
    tmp = defaultdict(int)
    for index, item in enumerate(value):
        tmp[item.get("x") ] += item.get("y")

    for tmp_key, tmp_value in tmp.items():
        data.setdefault(key, []).append(
            {
                "x": tmp_key,
                "y": tmp_value
            }
        )
print(data) # {1: [{'x': 'test_1', 'y': 3}, {'x': 'test_2', 'y': 1}]}

# test 1 values is added together

Example 5: merge two list of dictionaries python with string

import pandas as pd

l1 = [{'id': 9, 'av': 4}, {'id': 10, 'av': 0}, {'id': 8, 'av': 0}]
l2 = [{'id': 9, 'nv': 45}, {'id': 10, 'nv': 0}, {'id': 8, 'nv': 30}]

df1 = pd.DataFrame(l1).set_index('id')
df2 = pd.DataFrame(l2).set_index('id')
df = df1.merge(df2, left_index=True, right_index=True)
df.T.to_dict()
# {9: {'av': 4, 'nv': 45}, 10: {'av': 0, 'nv': 0}, 8: {'av': 0, 'nv': 30}}