Open In App

Python – Convert dictionary to K sized dictionaries

Given a Dictionary, divide dictionary into K sized different dictionaries list.

Input : test_dict = {‘Gfg’ : 1, ‘is’ : 2, ‘best’ : 3, ‘for’ : 4, ‘geeks’ : 5, ‘CS’ : 6}, K = 3 
Output : [{‘Gfg’: 1, ‘is’: 2, ‘best’: 3}, {‘for’: 4, ‘geeks’: 5, ‘CS’: 6}] 
Explanation : Divided into size of 3 keys. 



Input : test_dict = {‘Gfg’ : 1, ‘is’ : 2, ‘best’ : 3, ‘for’ : 4}, K = 2 
Output : [{‘Gfg’: 1, ‘is’: 2}, {‘best’: 3, ‘for’: 4}] 
Explanation : Divided into size of 2 keys.

Method 1: Using loop



In this, we iterate for all the keys in dictionary using loop and bifurcate according to size  and append to new list.




# Python3 code to demonstrate working of
# Convert dictionary to K Keys dictionaries
# Using loop
 
# initializing dictionary
test_dict = {'Gfg' : 1, 'is' : 2, 'best' : 3, 'for' : 4, 'geeks' : 5, 'CS' : 6}
 
# printing original dictionary
print("The original dictionary is : " + str(test_dict))
 
# initializing K
K = 2
 
res = []
count = 0
flag = 0
indict = dict()
for key in test_dict:
    indict[key] = test_dict[key]       
    count += 1
     
    # checking for K size and avoiding empty dict using flag
    if count % K == 0 and flag:
        res.append(indict)
         
        # reinitializing dictionary
        indict = dict()
        count = 0
    flag = 1
     
 
# printing result
print("The converted list : " + str(res))

Output
The original dictionary is : {'Gfg': 1, 'is': 2, 'best': 3, 'for': 4, 'geeks': 5, 'CS': 6}
The converted list : [{'Gfg': 1, 'is': 2}, {'best': 3, 'for': 4}, {'geeks': 5, 'CS': 6}]

Time Complexity: O(n*n), where n is the length of the list test_dict
Auxiliary Space: O(n) additional space of size n is created where n is the number of elements in the res list

Method 2: Using dictionary comprehension

Step-by-step approach:

Below is the implementation of the above approach:




# Python3 code to demonstrate working of
# Convert dictionary to K Keys dictionaries
# Using dictionary comprehension
 
# initializing dictionary
test_dict = {'Gfg' : 1, 'is' : 2, 'best' : 3, 'for' : 4, 'geeks' : 5, 'CS' : 6}
 
# printing original dictionary
print("The original dictionary is : " + str(test_dict))
 
# initializing K
K = 2
 
# using dictionary comprehension to create list of sub-dictionaries
res = [dict(list(test_dict.items())[i:i+K]) for i in range(0, len(test_dict), K)]
 
# printing result
print("The converted list : " + str(res))

Output
The original dictionary is : {'Gfg': 1, 'is': 2, 'best': 3, 'for': 4, 'geeks': 5, 'CS': 6}
The converted list : [{'Gfg': 1, 'is': 2}, {'best': 3, 'for': 4}, {'geeks': 5, 'CS': 6}]

Time complexity: O(N), where N is the number of key-value pairs in the original dictionary.
Auxiliary space: O(N/K), where N is the number of key-value pairs in the original dictionary and K is the size of each sub-dictionary. 

Method 3:  Using the iter function and the dict constructor. 

Step-by-step approach:

Below is the implementation of the above approach:




# Python3 code to demonstrate working of
# Convert dictionary to K Keys dictionaries
# Using iter function and dict constructor
import itertools
 
# initializing dictionary
test_dict = {'Gfg': 1, 'is': 2, 'best': 3, 'for': 4, 'geeks': 5, 'CS': 6}
 
# printing original dictionary
print("The original dictionary is : " + str(test_dict))
 
# initializing K
K = 2
 
# using iter function and dict constructor to create list of sub-dictionaries
it = iter(test_dict.items())
res = []
while True:
    sub_dict = dict(itertools.islice(it, K))
    if not sub_dict:
        break
    res.append(sub_dict)
 
# printing result
print("The converted list : " + str(res))

Output
The original dictionary is : {'Gfg': 1, 'is': 2, 'best': 3, 'for': 4, 'geeks': 5, 'CS': 6}
The converted list : [{'Gfg': 1, 'is': 2}, {'best': 3, 'for': 4}, {'geeks': 5, 'CS': 6}]

Time complexity: O(n), where n is the number of items in the original dictionary. 
Auxiliary space: O(n), since we need to store the list of sub-dictionaries.


Article Tags :