Python | Sum list of dictionaries with same key
You have given a list of dictionaries, the task is to return a single dictionary with sum values with the same key.
Let’s discuss different methods to do the task.
Method #1: Using reduce() + operator
# Python code to demonstrate # return the sum of values of dictionary # with same keys in list of dictionary import collections, functools, operator # Initialising list of dictionary ini_dict = [{ 'a' : 5 , 'b' : 10 , 'c' : 90 }, { 'a' : 45 , 'b' : 78 }, { 'a' : 90 , 'c' : 10 }] # printing initial dictionary print ( "initial dictionary" , str (ini_dict)) # sum the values with same keys result = dict (functools. reduce (operator.add, map (collections.Counter, ini_dict))) print ( "resultant dictionary : " , str (result)) |
initial dictionary [{‘b’: 10, ‘a’: 5, ‘c’: 90}, {‘b’: 78, ‘a’: 45}, {‘a’: 90, ‘c’: 10}]
resultant dictionary : {‘b’: 88, ‘a’: 140, ‘c’: 100}
Method #2: Using counter
# Python code to demonstrate # return the sum of values of dictionary # with same keys in list of dictionary import collections # Initialising list of dictionary ini_dict = [{ 'a' : 5 , 'b' : 10 , 'c' : 90 }, { 'a' : 45 , 'b' : 78 }, { 'a' : 90 , 'c' : 10 }] # printing initial dictionary print ( "initial dictionary" , str (ini_dict)) # sum the values with same keys counter = collections.Counter() for d in ini_dict: counter.update(d) result = dict (counter) print ( "resultant dictionary : " , str (counter)) |
initial dictionary [{‘c’: 90, ‘a’: 5, ‘b’: 10}, {‘a’: 45, ‘b’: 78}, {‘a’: 90, ‘c’: 10}]
resultant dictionary : Counter({‘a’: 140, ‘c’: 100, ‘b’: 88})
Method #3: Naive Method
# Python code to demonstrate # return the sum of values of dictionary # with same keys in list of dictionary from operator import itemgetter # Initialising list of dictionary ini_dict = [{ 'a' : 5 , 'b' : 10 , 'c' : 90 }, { 'a' : 45 , 'b' : 78 }, { 'a' : 90 , 'c' : 10 }] # printing initial dictionary print ( "initial dictionary" , str (ini_dict)) # sum the values with same keys result = {} for d in ini_dict: for k in d.keys(): result[k] = result.get(k, 0 ) + d[k] print ( "resultant dictionary : " , str (result)) |
initial dictionary [{‘b’: 10, ‘c’: 90, ‘a’: 5}, {‘b’: 78, ‘a’: 45}, {‘c’: 10, ‘a’: 90}]
resultant dictionary : {‘b’: 88, ‘c’: 100, ‘a’: 140}