Skip to content
Related Articles
Open in App
Not now

Related Articles

Python | Sum list of dictionaries with same key

Improve Article
Save Article
  • Difficulty Level : Easy
  • Last Updated : 07 Jan, 2023
Improve Article
Save Article

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 

Python3




# 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))

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 counter 

Python3




# 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))

Output:

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 

Python3




# 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))

Output:

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

Method: Using a dictionary comprehension

Another approach to sum the values of dictionaries with the same key in a list of dictionaries is to use a dictionary comprehension. This method is concise and can be easier to read than the other methods, depending on your personal preferences. Here’s an example of how you can use a dictionary comprehension to achieve the same result as the other methods:

Python3




ini_dict = [{'a':5, 'b':10, 'c':90},
            {'a':45, 'b':78},
            {'a':90, 'c':10}]
 
# Create a dictionary with keys and values obtained by iterating over the keys in the dictionaries
# and summing the values for each key.
result = {k: sum(d[k] for d in ini_dict if k in d) for k in set(k for d in ini_dict for k in d)}
 
print(result)  # Output: {'b': 88, 'a': 140, 'c': 100}
#This code is contributed by Edula Vinay Kumar Reddy

Output

{'a': 140, 'c': 100, 'b': 88}

The time complexity of this approach is O(n * m), where n is the number of dictionaries in the list and m is the average number of keys in each dictionary. This is because the dictionary comprehension iterates over all the keys in all the dictionaries and sums the values for each key.

The space complexity is also O(n * m), because the resulting dictionary will have at most n * m key-value pairs.


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!