Python | Summary list of dictionaries with the same key

Let`s discuss the different methods to accomplish the task.

Method # 1: Using reduce () + operator

# Python code for demonstration
# return the sum of the dictionary values ​​
# with the same keys in the dictionary list

  

import collections, functools, operator

 
# Initializing dictionary list

ini_dict = [{ ` a` : 5 , `b` : 10 , ` c` : 90 },

{ `a` : 45 , `b` : 78 }, 

{ `a` : 90 , `c` : 10 }]

 

 
# print the source dictionary

print  ( "initial dictionary" , str (ini_dict))

 
# sum the values ​​with the same keys

result = dict (functools. reduce (operator.add,

map (collections.Counter, ini_dict)))

 

print ( "resultant dictionary:" , str (result))

Output:

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 a counter

# Python code for demonstration
# return the sum of the dictionary values ​​
# with the same keys in the dictionary list

 

import collections

 
# Initializing dictionary list

ini_dict = [{ `a` : 5 , `b` < / code> : 10 , `c` : 90 }, 

{ `a` : 45 , ` b` : 78 },

{ `a` : 90 , `c` : 10 }]

  
# print the source dictionary

print ( " initial dictionary " , str (ini_dict))

 
# summarize the values with the same keys

counter = collections.Counter ()

for d in ini_dict: 

counter.update (d)

 

result = dict (counter)

  

 

print ( "resultant dictionary:" , str ( counter))

Exit:

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 for demonstration
# return the sum of values dictionary
# with the same keys in the dictionary list

 

from operator import itemgetter

  
# Initializing dictionary list

ini_dict = [{ ` a` : 5 , `b` : 10 , `c` : 90 },

  { `a` : 45 , `b` : 78 }, 

{ `a` : 90 , `c` : 10 }]

 
# print the original dictionary

print ( "initial dictionary" , str (ini_dict))

  
# sum the values ​​with the 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))

Exit:

initial dictionary [{`b `: 10,` c `: 90,` a `: 5}, {` b `: 78,` a `: 45}, {` c `: 10,` a `: 90}]
resultant dictionary: {`b`: 88, `c`: 100, `a`: 140}