Sometimes, while working with Python dictionaries, we can have problem in which we need to find all possible values of all keys in a dictionary. This utility is quite common and can occur in many domains including day-day programming and school programming. Lets discuss certain way in which this task can be performed.
Method #1 : Using loop + defaultdict() The combination of above functionalities can be used to perform this task. In this, we capture all the elements in a list by initializing defaultdict with list datatype and keep on appending all the values to associated key.
Python3
# Python3 code to demonstrate working of # Group keys to values list # Using loop + defaultdict() from collections import defaultdict # initializing list test_list = [{ 'gfg' : 1 , 'is' : 4 , 'best' : 7 }, { 'gfg' : 9 , 'is' : 8 , 'best' : 3 }, { 'gfg' : 4 , 'is' : 4 , 'best' : 7 }, { 'gfg' : 7 , 'is' : 2 , 'best' : 8 }, { 'gfg' : 1 , 'is' : 4 , 'best' : 7 }, { 'gfg' : 10 , 'is' : 9 , 'best' : 2 }, { 'gfg' : 0 , 'is' : 5 , 'best' : 6 }] # printing original list print ("The original list is : " + str (test_list)) # Group keys to values list # Using loop + defaultdict() res = defaultdict( set ) for sub in test_list: for key, val in sub.items(): res[key].add(val) # printing result print ("The grouped key values : " + str ( dict (res))) |
The original list is : [{‘best’: 7, ‘gfg’: 1, ‘is’: 4}, {‘best’: 3, ‘gfg’: 9, ‘is’: 8}, {‘best’: 7, ‘gfg’: 4, ‘is’: 4}, {‘best’: 8, ‘gfg’: 7, ‘is’: 2}, {‘best’: 7, ‘gfg’: 1, ‘is’: 4}, {‘best’: 2, ‘gfg’: 10, ‘is’: 9}, {‘best’: 6, ‘gfg’: 0, ‘is’: 5}] The grouped key values : {‘best’: {8, 2, 3, 6, 7}, ‘gfg’: {0, 1, 4, 7, 9, 10}, ‘is’: {8, 9, 2, 4, 5}}
Time complexity: O(n*n), where n is the number of values in the dictionary.
Auxiliary Space: O(n), where n is the size of dictionary
Using set comprehension:
Approach:
In this approach, we iterate over the list of dictionaries and create a set comprehension for each key to extract the values of that key from all the dictionaries. We then add these sets to a new dictionary.
Python3
def group_keys_to_values_4(original_list): result_dict = {} for dictionary in original_list: for key in dictionary: result_dict.setdefault(key, set ()).update({dictionary[key]}) return result_dict original_list = [{ 'best' : 7 , 'gfg' : 1 , 'is' : 4 }, { 'best' : 3 , 'gfg' : 9 , 'is' : 8 },{ 'best' : 7 , 'gfg' : 4 , 'is' : 4 }, { 'best' : 8 , 'gfg' : 7 , 'is' : 2 },{ 'best' : 7 , 'gfg' : 1 , 'is' : 4 },{ 'best' : 2 , 'gfg' : 10 , 'is' : 9 },{ 'best' : 6 , 'gfg' : 0 , 'is' : 5 }] grouped_dict = group_keys_to_values_4(original_list) print ( "The original list is :" , original_list) print ( "The grouped key values :" , grouped_dict) |
The original list is : [{'best': 7, 'gfg': 1, 'is': 4}, {'best': 3, 'gfg': 9, 'is': 8}, {'best': 7, 'gfg': 4, 'is': 4}, {'best': 8, 'gfg': 7, 'is': 2}, {'best': 7, 'gfg': 1, 'is': 4}, {'best': 2, 'gfg': 10, 'is': 9}, {'best': 6, 'gfg': 0, 'is': 5}] The grouped key values : {'best': {2, 3, 6, 7, 8}, 'gfg': {0, 1, 4, 7, 9, 10}, 'is': {2, 4, 5, 8, 9}}
the time complexity is O(n*m), where n is the number of dictionaries in the list and m is the number of keys in each dictionary.
the space complexity is O(n*m), where n is the number of dictionaries in the list and m is the number of key-value pairs in each dictionary.
METHOD 3:
APPROACH:
This approach creates a dictionary where each key is associated with a list of values from all the dictionaries in the “test_list” that have that key. The defaultdict is used to ensure that any missing key in the dictionary is initialized with an empty list.
ALGORITHM:
1.Import the defaultdict class from the collections module.
2.Initialize a defaultdict with the value type as list.
3.Iterate through each dictionary in the test_list.
4.For each dictionary, iterate through its items and add the key-value pairs to the grouped_dict defaultdict.
5.If the key already exists in grouped_dict, append the value to its list, otherwise create a new key-value pair.
6.Print the grouped_dict dictionary.
Python3
from collections import defaultdict test_list = [{ 'gfg' : 1 , 'is' : 4 , 'best' : 7 }, { 'gfg' : 9 , 'is' : 8 , 'best' : 3 }, { 'gfg' : 4 , 'is' : 4 , 'best' : 7 }, { 'gfg' : 7 , 'is' : 2 , 'best' : 8 }, { 'gfg' : 1 , 'is' : 4 , 'best' : 7 }, { 'gfg' : 10 , 'is' : 9 , 'best' : 2 }, { 'gfg' : 0 , 'is' : 5 , 'best' : 6 }] grouped_dict = defaultdict( list ) for dictionary in test_list: for key, value in dictionary.items(): grouped_dict[key].append(value) print ( dict (grouped_dict)) |
{'gfg': [1, 9, 4, 7, 1, 10, 0], 'is': [4, 8, 4, 2, 4, 9, 5], 'best': [7, 3, 7, 8, 7, 2, 6]}
Time complexity: O(n*m), where n is the number of dictionaries in the test_list and m is the average number of items in a dictionary.
Auxiliary Space: O(k)