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))
|
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))
|
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))
|
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:
- Import the itertools module.
- Initialize an empty list res.
- Use the groupby() function to group the test_list into pairs based on the remainder when the index is divided by 2.
- For each pair of elements, create a dictionary with keys “name” and “number“.
- Append each dictionary to the res list.
- Convert the res list to a string and print the result.
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))
|
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.