Open In App

Python – Convert List to List of dictionaries

Given list values and keys list, convert these values to key value pairs in form of list of dictionaries.

Input : test_list = [“Gfg”, 3, “is”, 8], key_list = [“name”, “id”] 
Output : [{‘name’: ‘Gfg’, ‘id’: 3}, {‘name’: ‘is’, ‘id’: 8}] 
Explanation : Values mapped by custom key, “name” -> “Gfg”, “id” -> 3. 



Input : test_list = [“Gfg”, 10], key_list = [“name”, “id”] 
Output : [{‘name’: ‘Gfg’, ‘id’: 10}] 
Explanation : Conversion of lists to list of records by keys mapping.

Method #1 : Using loop + dictionary comprehension



This is one of the ways in which this task can be performed. In this, we perform mapping values using dictionary comprehension. The iteration is performed using loop.




# Python3 code to demonstrate working of
# Convert List to List of dictionaries
# Using dictionary comprehension + loop
 
# initializing lists
test_list = ["Gfg", 3, "is", 8, "Best", 10, "for", 18, "Geeks", 33]
 
# printing original list
print("The original list : " + str(test_list))
 
# initializing key list
key_list = ["name", "number"]
 
# loop to iterate through elements
# using dictionary comprehension
# for dictionary construction
n = len(test_list)
res = []
for idx in range(0, n, 2):
    res.append({key_list[0]: test_list[idx], key_list[1] : test_list[idx + 1]})
 
# printing result
print("The constructed dictionary list : " + str(res))

Output

The original list : [‘Gfg’, 3, ‘is’, 8, ‘Best’, 10, ‘for’, 18, ‘Geeks’, 33] The constructed dictionary list : [{‘name’: ‘Gfg’, ‘number’: 3}, {‘name’: ‘is’, ‘number’: 8}, {‘name’: ‘Best’, ‘number’: 10}, {‘name’: ‘for’, ‘number’: 18}, {‘name’: ‘Geeks’, ‘number’: 33}]

Time Complexity: O(n*n) where n is the number of elements in the dictionary
Auxiliary Space: O(n), where n is the number of elements in the dictionary

Method #2 : Using dictionary comprehension + list comprehension

The combination of above functions is used to solve this problem. In this, we perform a similar task as above method. But difference is that its performed as shorthand.




# Python3 code to demonstrate working of
# Convert List to List of dictionaries
# Using zip() + list comprehension
 
# initializing lists
test_list = ["Gfg", 3, "is", 8, "Best", 10, "for", 18, "Geeks", 33]
 
# printing original list
print("The original list : " + str(test_list))
 
# initializing key list
key_list = ["name", "number"]
 
# using list comprehension to perform as shorthand
n = len(test_list)
res = [{key_list[0]: test_list[idx], key_list[1]: test_list[idx + 1]}
       for idx in range(0, n, 2)]
 
# printing result
print("The constructed dictionary list : " + str(res))

Output

The original list : [‘Gfg’, 3, ‘is’, 8, ‘Best’, 10, ‘for’, 18, ‘Geeks’, 33] The constructed dictionary list : [{‘name’: ‘Gfg’, ‘number’: 3}, {‘name’: ‘is’, ‘number’: 8}, {‘name’: ‘Best’, ‘number’: 10}, {‘name’: ‘for’, ‘number’: 18}, {‘name’: ‘Geeks’, ‘number’: 33}]

Method #3: Using zip function and dictionary comprehension

The zip() function creates pairs of corresponding elements from the two lists, and the enumerate() function is used to iterate over the key_list to assign the keys to the dictionary. Finally, the dictionary comprehension is used to construct the dictionaries.




# initializing lists
test_list = ["Gfg", 3, "is", 8, "Best", 10, "for", 18, "Geeks", 33]
 
# initializing key list
key_list = ["name", "number"]
 
# using zip() function and dictionary comprehension
res = [{key_list[i]: val for i, val in enumerate(pair)} for pair in zip(test_list[::2], test_list[1::2])]
 
# printing result
print("The constructed dictionary list : " + str(res))

Output
The constructed dictionary list : [{'name': 'Gfg', 'number': 3}, {'name': 'is', 'number': 8}, {'name': 'Best', 'number': 10}, {'name': 'for', 'number': 18}, {'name': 'Geeks', 'number': 33}]

Time complexity: O(n), where n is the length of the input list test_list. 
Auxiliary space: O(n), where n is the length of the input list test_list. 

Method 4: Use the groupby() function from the itertools module. 

Step-by-step approach:

Below is the implementation of the above approach:




# Python3 code to demonstrate working of
# Convert List to List of dictionaries
# Using groupby() function from itertools module
 
# import itertools module
import itertools
 
# initializing lists
test_list = ["Gfg", 3, "is", 8, "Best", 10, "for", 18, "Geeks", 33]
 
# printing original list
print("The original list : " + str(test_list))
 
# initializing key list
key_list = ["name", "number"]
 
# using groupby() function to group elements into pairs
res = []
for pair in zip(test_list[::2], test_list[1::2]):
    res.append({key_list[0]: pair[0], key_list[1]: pair[1]})
 
# printing result
print("The constructed dictionary list : " + str(res))

Output
The original list : ['Gfg', 3, 'is', 8, 'Best', 10, 'for', 18, 'Geeks', 33]
The constructed dictionary list : [{'name': 'Gfg', 'number': 3}, {'name': 'is', 'number': 8}, {'name': 'Best', 'number': 10}, {'name': 'for', 'number': 18}, {'name': 'Geeks', 'number': 33}]

Time complexity: O(N), where N is the length of the input list.
Auxiliary space: O(N), since we create a new list of tuples using the zip() function.


Article Tags :