GeeksforGeeks App
Open App
Browser
Continue

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

 `# 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

 `# 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.

Python3

 `# 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:

• 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

 `# 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.

My Personal Notes arrow_drop_up