Open In App

Python – Group keys to values list

Improve
Improve
Like Article
Like
Save
Share
Report

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


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.

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)


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.

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


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)



Last Updated : 27 Apr, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads