Thursday, August 28, 2025
HomeLanguagesPython – Values frequency across Dictionaries lists

Python – Values frequency across Dictionaries lists

Given two list of dictionaries, compute frequency corresponding to each value in dictionary 1 to second.

Input : test_list1 = [{“Gfg” : 6}, {“best” : 10}], test_list2 = [{“a” : 6}, {“b” : 10}, {“d” : 6}}] 
Output : {‘Gfg’: 2, ‘best’: 1} 
Explanation : 6 has 2 occurrence in 2nd list, 10 has 1. 

Input : test_list1 = [{“Gfg” : 6}], test_list2 = [{“a” : 6}, {“b” : 6}, {“d” : 6}}] 
Output : {‘Gfg’: 3}
 Explanation : 6 has 3 occurrence in 2nd list.

Method #1: Using dictionary comprehension + count() + list comprehension

The combination of above functionalities can be used to solve this problem. In this, we perform this task using 2 steps, in first we extract all values from second list, and then perform mapping with frequency with first dictionary using list comprehension and count().

Python3




# Python3 code to demonstrate working of
# Values frequency across Dictionaries lists
# Using list comprehension + dictionary comprehension + count()
 
# initializing lists
test_list1 = [{"Gfg" : 6}, {"is" : 9}, {"best" : 10}]
test_list2 = [{"a" : 6}, {"b" : 10}, {"c" : 9}, {"d" : 6}, {"e" : 9}, {"f" : 9}]
 
# printing original list
print("The original list 1 : " + str(test_list1))
print("The original list 2 : " + str(test_list2))
 
# extracting values from target dictionary
temp = [val for sub in test_list2 for key, val in sub.items()]
 
# frequency mapping from 1st dictionary keys
res = {key : temp.count(val) for sub in test_list1 for key, val in sub.items()}
 
# printing result
print("The frequency dictionary : " + str(res))


Output

The original list 1 : [{'Gfg': 6}, {'is': 9}, {'best': 10}]
The original list 2 : [{'a': 6}, {'b': 10}, {'c': 9}, {'d': 6}, {'e': 9}, {'f': 9}]
The frequency dictionary : {'Gfg': 2, 'is': 3, 'best': 1}

Time complexity: O(n^2), where n is the total number of elements in both the input lists.
Auxiliary space: O(n), where n is the total number of elements in both the input lists.

Method #2: Using dictionary comprehension + operator.countOf() + list comprehension

The combination of above functionalities can be used to solve this problem. In this, we perform this task using 2 steps, in first we extract all values from second list, and then perform mapping with frequency with first dictionary using list comprehension and operator.countOf().

Python3




# Python3 code to demonstrate working of
# Values frequency across Dictionaries lists
# Using list comprehension + dictionary comprehension + operator.countOf()
import operator as op
# initializing lists
test_list1 = [{"Gfg" : 6}, {"is" : 9}, {"best" : 10}]
test_list2 = [{"a" : 6}, {"b" : 10}, {"c" : 9}, {"d" : 6}, {"e" : 9}, {"f" : 9}]
 
# printing original list
print("The original list 1 : " + str(test_list1))
print("The original list 2 : " + str(test_list2))
 
# extracting values from target dictionary
temp = [val for sub in test_list2 for key, val in sub.items()]
 
# frequency mapping from 1st dictionary keys
res = {key : op.countOf(temp,val) for sub in test_list1 for key, val in sub.items()}
 
# printing result
print("The frequency dictionary : " + str(res))


Output

The original list 1 : [{'Gfg': 6}, {'is': 9}, {'best': 10}]
The original list 2 : [{'a': 6}, {'b': 10}, {'c': 9}, {'d': 6}, {'e': 9}, {'f': 9}]
The frequency dictionary : {'Gfg': 2, 'is': 3, 'best': 1}

Time Complexity: O(n)
Auxiliary Space:  O(n)

Method 3: Using a nested for loop

This program counts the frequency of values from the first list of dictionaries in the second list of dictionaries, and stores the results in a dictionary. The output is the frequency dictionary.

Python3




# Python3 code to demonstrate working of
# Values frequency across Dictionaries lists
# Using nested for loop
 
# initializing lists
test_list1 = [{"Gfg" : 6}, {"is" : 9}, {"best" : 10}]
test_list2 = [{"a" : 6}, {"b" : 10}, {"c" : 9}, {"d" : 6}, {"e" : 9}, {"f" : 9}]
 
# printing original list
print("The original list 1 : " + str(test_list1))
print("The original list 2 : " + str(test_list2))
 
# empty dictionary to store the result
res = {}
 
# iterate through each dictionary in test_list1
for dict1 in test_list1:
    # iterate through each key-value pair in the dictionary
    for key1, val1 in dict1.items():
        count = 0
        # iterate through each dictionary in test_list2
        for dict2 in test_list2:
            # iterate through each key-value pair in the dictionary
            for key2, val2 in dict2.items():
                # check if the value is equal to the value in test_list1
                if val2 == val1:
                    count += 1
        res[key1] = count
 
# printing result
print("The frequency dictionary : " + str(res))


Output

The original list 1 : [{'Gfg': 6}, {'is': 9}, {'best': 10}]
The original list 2 : [{'a': 6}, {'b': 10}, {'c': 9}, {'d': 6}, {'e': 9}, {'f': 9}]
The frequency dictionary : {'Gfg': 2, 'is': 3, 'best': 1}

Time complexity: O(n^3), where n is the length of the longer of the two input lists.
Auxiliary space: O(1) or constant.

Method #6: Using defaultdict

Another way to solve this problem is by using the defaultdict class from the collections module.

Step by step:

  • Import the defaultdict class from the collections module.
  • Initialize a defaultdict object with a default value of 0.
  • Use a nested for loop to iterate through each dictionary in test_list1 and each key-value pair in the dictionary.
  • Inside the nested for loop, use another nested for loop to iterate through each dictionary in test_list2 and each key-value pair in the dictionary.
  • Check if the value of the current key-value pair in test_list1 is equal to the value of the current key-value pair in test_list2.
  • If the values are equal, increment the corresponding key in the defaultdict object by 1.
  • Convert the defaultdict object to a regular dictionary using the dict() constructor.
  • Print the resulting dictionary.

Python3




from collections import defaultdict
 
# initializing lists
test_list1 = [{"Gfg" : 6}, {"is" : 9}, {"best" : 10}]
test_list2 = [{"a" : 6}, {"b" : 10}, {"c" : 9}, {"d" : 6}, {"e" : 9}, {"f" : 9}]
 
# initialize a defaultdict object with a default value of 0
res = defaultdict(int)
 
# iterate through each dictionary in test_list1
for dict1 in test_list1:
    # iterate through each key-value pair in the dictionary
    for key1, val1 in dict1.items():
        # iterate through each dictionary in test_list2
        for dict2 in test_list2:
            # iterate through each key-value pair in the dictionary
            for key2, val2 in dict2.items():
                # check if the value is equal to the value in test_list1
                if val2 == val1:
                    # increment the corresponding key in the defaultdict object by 1
                    res[key1] += 1
 
# convert the defaultdict object to a regular dictionary
res = dict(res)
 
# print the resulting dictionary
print("The frequency dictionary : " + str(res))


Output

The frequency dictionary : {'Gfg': 2, 'is': 3, 'best': 1}

Time complexity: O(n^2), where n is the length of test_list1 multiplied by the length of test_list2.
Auxiliary space: O(k), where k is the number of unique values in test_list1.

Dominic
Dominichttp://wardslaus.com
infosec,malicious & dos attacks generator, boot rom exploit philanthropist , wild hacker , game developer,
RELATED ARTICLES

Most Popular

Dominic
32236 POSTS0 COMMENTS
Milvus
80 POSTS0 COMMENTS
Nango Kala
6609 POSTS0 COMMENTS
Nicole Veronica
11779 POSTS0 COMMENTS
Nokonwaba Nkukhwana
11828 POSTS0 COMMENTS
Shaida Kate Naidoo
6719 POSTS0 COMMENTS
Ted Musemwa
7002 POSTS0 COMMENTS
Thapelo Manthata
6678 POSTS0 COMMENTS
Umr Jansen
6690 POSTS0 COMMENTS