Open In App

Python – Group keys to values list

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

Output : 

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.




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)

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




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

Output
{'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)


Article Tags :