Python – Convert Nested Tuple to Custom Key Dictionary
Last Updated :
07 Apr, 2023
Sometimes, while working with Python records, we can have data that come without proper column names/identifiers, which can just be identified by their index, but we intend to assign them keys and render in form of dictionaries. This kind of problem can have applications in domains such as web development. Let’s discuss certain ways in which this task can be performed.
Input : test_tuple = ((1, ‘Gfg’, 2), (3, ‘best’, 4)), keys = [‘key’, ‘value’, ‘id’]
Output : [{‘key’: 1, ‘value’: ‘Gfg’, ‘id’: 2}, {‘key’: 3, ‘value’: ‘best’, ‘id’: 4}]
Input : test_tuple = test_tuple = ((1, ‘Gfg’), (2, 3)), keys = [‘key’, ‘value’]
Output : [{‘key’: 1, ‘value’: ‘Gfg’}, {‘key’: 2, ‘value’: 3}]
Method #1 : Using list comprehension + dictionary comprehension The combination of above functionalities can be used to solve this problem. In this, we perform the task of assigning keys using dictionary comprehension and iteration of all keys and constructing data using list comprehension.
Python3
test_tuple = (( 4 , 'Gfg' , 10 ), ( 3 , 'is' , 8 ), ( 6 , 'Best' , 10 ))
print ( "The original tuple : " + str (test_tuple))
res = [{ 'key' : sub[ 0 ], 'value' : sub[ 1 ], 'id' : sub[ 2 ]}
for sub in test_tuple]
print ( "The converted dictionary : " + str (res))
|
Output
The original tuple : ((4, 'Gfg', 10), (3, 'is', 8), (6, 'Best', 10))
The converted dictionary : [{'key': 4, 'value': 'Gfg', 'id': 10}, {'key': 3, 'value': 'is', 'id': 8}, {'key': 6, 'value': 'Best', 'id': 10}]
Time complexity: O(n), where n is the number of tuples in the input nested tuple.
Auxiliary space: O(n), where n is the number of tuples in the input nested tuple.
Method #2: Using zip() + list comprehension The combination of above functions can be used to solve this problem. In this, we assign index wise keys using list content and mapping using zip(). In this, flexibility of predefining/scaling keys is provided.
Python3
test_tuple = (( 4 , 'Gfg' , 10 ), ( 3 , 'is' , 8 ), ( 6 , 'Best' , 10 ))
print ( "The original tuple : " + str (test_tuple))
keys = [ 'key' , 'value' , 'id' ]
res = [{key: val for key, val in zip (keys, sub)}
for sub in test_tuple]
print ( "The converted dictionary : " + str (res))
|
Output
The original tuple : ((4, 'Gfg', 10), (3, 'is', 8), (6, 'Best', 10))
The converted dictionary : [{'key': 4, 'value': 'Gfg', 'id': 10}, {'key': 3, 'value': 'is', 'id': 8}, {'key': 6, 'value': 'Best', 'id': 10}]
Time complexity: O(n), where n is the number of elements in the tuple
Auxiliary space: O(n), where n is the number of elements in the tuple.
Method #3: Using a for loop
- Initialize a tuple named ‘test_tuple’ with nested tuples as its elements.
- Initialize a list named ‘keys’ containing the desired keys for the output dictionary.
- Initialize an empty list named ‘res’ to store the resulting dictionaries.
- Start a for loop to iterate over each nested tuple in ‘test_tuple’.
- For each nested tuple, initialize an empty dictionary named ‘sub_dict’.
- Start a nested for loop using the range function to iterate over the range of length of ‘keys’.
- For each iteration of the nested for loop, assign a key-value pair to the ‘sub_dict’ dictionary using the current key from ‘keys’ and the current value from the current nested tuple.
- Append the ‘sub_dict’ dictionary to the ‘res’ list.
- Once the for loop finishes, print the resulting ‘res’ list of dictionaries as a string with a message.
Python3
test_tuple = (( 4 , 'Gfg' , 10 ), ( 3 , 'is' , 8 ), ( 6 , 'Best' , 10 ))
keys = [ 'key' , 'value' , 'id' ]
res = []
for sub in test_tuple:
sub_dict = {}
for i in range ( len (keys)):
sub_dict[keys[i]] = sub[i]
res.append(sub_dict)
print ( "The converted dictionary : " + str (res))
|
Output
The converted dictionary : [{'key': 4, 'value': 'Gfg', 'id': 10}, {'key': 3, 'value': 'is', 'id': 8}, {'key': 6, 'value': 'Best', 'id': 10}]
Time complexity: The time complexity of this approach is O(nm), where n is the number of tuples in the input tuple and m is the number of elements in each tuple.
Auxiliary space: The auxiliary space required by the code is O(nm), where n is the number of tuples in the input tuple and m is the number of elements in each tuple.
Please Login to comment...