Python – Convert dictionary to K sized dictionaries
Last Updated :
27 Apr, 2023
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
test_dict = { 'Gfg' : 1 , 'is' : 2 , 'best' : 3 , 'for' : 4 , 'geeks' : 5 , 'CS' : 6 }
print ( "The original dictionary is : " + str (test_dict))
K = 2
res = []
count = 0
flag = 0
indict = dict ()
for key in test_dict:
indict[key] = test_dict[key]
count + = 1
if count % K = = 0 and flag:
res.append(indict)
indict = dict ()
count = 0
flag = 1
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:
- Initialize a dictionary called test_dict with key-value pairs.
- Print the original dictionary using the print() function.
- Set the value of K to the desired number of keys per dictionary.
- Use dictionary comprehension to create a list of dictionaries. Inside the comprehension, iterate over the items of test_dict and use the modulo operator to group them into sub-dictionaries of size K. The dict() constructor is used to create each sub-dictionary.
- Print the resulting list of dictionaries using the print() function.
Below is the implementation of the above approach:
Python3
test_dict = { 'Gfg' : 1 , 'is' : 2 , 'best' : 3 , 'for' : 4 , 'geeks' : 5 , 'CS' : 6 }
print ( "The original dictionary is : " + str (test_dict))
K = 2
res = [ dict ( list (test_dict.items())[i:i + K]) for i in range ( 0 , len (test_dict), K)]
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:
- Initialize an empty list to store the sub-dictionaries.
- Get an iterator of the original dictionary using the iter function.
- In each iteration, use the dict constructor to create a sub-dictionary from the next K items in the iterator, where K is the desired number of keys in each sub-dictionary.
- Append the sub-dictionary to the list of sub-dictionaries.
- Return the list of sub-dictionaries.
Below is the implementation of the above approach:
Python3
import itertools
test_dict = { 'Gfg' : 1 , 'is' : 2 , 'best' : 3 , 'for' : 4 , 'geeks' : 5 , 'CS' : 6 }
print ( "The original dictionary is : " + str (test_dict))
K = 2
it = iter (test_dict.items())
res = []
while True :
sub_dict = dict (itertools.islice(it, K))
if not sub_dict:
break
res.append(sub_dict)
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.
Please Login to comment...