 GeeksforGeeks App
Open App Browser
Continue

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

My Personal Notes arrow_drop_up