Open In App

Python – Replace value by Kth index value in Dictionary List

Given a dictionary list, the task is to write a Python program to replace the value of a particular key with kth index of value if the value of the key is list. 

Examples:



Input : test_list = [{‘gfg’ : [5, 7, 9, 1], ‘is’ : 8, ‘good’ : 10}, {‘gfg’ : 1, ‘for’ : 10, ‘geeks’ : 9}, {‘love’ : 3, ‘gfg’ : [7, 3, 9, 1]}], K = 2, key = “gfg” 
Output : [{‘gfg’: 9, ‘is’: 8, ‘good’: 10}, {‘gfg’: 1, ‘for’: 10, ‘geeks’: 9}, {‘love’: 3, ‘gfg’: 9}] 
Explanation : gfg is assigned with 9 which is 2nd index in list.

Input : test_list = [{‘gfg’ : [5, 7, 9, 1], ‘is’ : 8, ‘good’ : 10}, {‘gfg’ : 1, ‘for’ : 10, ‘geeks’ : 9}], K = 2, key = “gfg” 
Output : [{‘gfg’: 9, ‘is’: 8, ‘good’: 10}, {‘gfg’: 1, ‘for’: 10, ‘geeks’: 9}] 
Explanation : gfg is assigned with 9 which is 2nd index in list. 



Method #1 : Using loop + isinstance()

Use isinstance() to check for list type of values and loop is used to iterate through dictionaries.

Step-by-step approach :

Below is the implementation of the above approach:




# Python3 code to demonstrate working of
# Replace value by Kth index value in Dictionary List
# Using loop + isinstance()
 
# initializing list
test_list = [{'gfg': [5, 7, 9, 1], 'is': 8, 'good': 10},
             {'gfg': 1, 'for': 10, 'geeks': 9},
             {'love': 3, 'gfg': [7, 3, 9, 1]}]
 
# printing original list
print("The original list is : " + str(test_list))
 
# initializing K
K = 2
 
# initializing Key
key = "gfg"
 
for sub in test_list:
 
    # using isinstance() to check for list
    if isinstance(sub[key], list):
        sub[key] = sub[key][K]
 
# printing result
print("The Modified Dictionaries : " + str(test_list))

Output
The original list is : [{'gfg': [5, 7, 9, 1], 'is': 8, 'good': 10}, {'gfg': 1, 'for': 10, 'geeks': 9}, {'love': 3, 'gfg': [7, 3, 9, 1]}]
The Modified Dictionaries : [{'gfg': 9, 'is': 8, 'good': 10}, {'gfg': 1, 'for': 10, 'geeks': 9}, {'love': 3, 'gfg': 9}]

Time Complexity: O(n)
Auxiliary Space: O(1)

Method #2 : Using dictionary comprehension + isinstance()

In this, we reconstruct dictionaries with modified dictionary values using isinstance() and dictionary comprehension is used to form intermediate dictionaries.




# Python3 code to demonstrate working of
# Replace value by Kth index value in Dictionary List
# Using dictionary comprehension + isinstance()
 
# initializing list
test_list = [{'gfg': [5, 7, 9, 1], 'is': 8, 'good': 10},
             {'gfg': 1, 'for': 10, 'geeks': 9},
             {'love': 3, 'gfg': [7, 3, 9, 1]}]
 
# printing original list
print("The original list is : " + str(test_list))
 
# initializing K
K = 2
 
# initializing Key
key = "gfg"
 
# intermediate Dictionaries constructed using dictionary comprehension
res = [{newkey: (val[K] if isinstance(val, list) and newkey == key else val)
        for newkey, val in sub.items()} for sub in test_list]
 
# printing result
print("The Modified Dictionaries : " + str(res))

Output
The original list is : [{'gfg': [5, 7, 9, 1], 'is': 8, 'good': 10}, {'gfg': 1, 'for': 10, 'geeks': 9}, {'love': 3, 'gfg': [7, 3, 9, 1]}]
The Modified Dictionaries : [{'gfg': 9, 'is': 8, 'good': 10}, {'gfg': 1, 'for': 10, 'geeks': 9}, {'love': 3, 'gfg': 9}]

Time Complexity: O(n)
Auxiliary Space: O(1)

Method 3: Modifying the original list in-place using a list comprehension:

This approach uses a list comprehension to create a new list of dictionaries with the specified key updated at index K, and then assigns the new list back to the original variable to modify it in-place. The output of this code should match exactly with the original program.




# initializing list
test_list = [{'gfg': [5, 7, 9, 1], 'is': 8, 'good': 10},
             {'gfg': 1, 'for': 10, 'geeks': 9},
             {'love': 3, 'gfg': [7, 3, 9, 1]}]
 
# printing original list
print("The original list is : " + str(test_list))
 
# initializing K and key
K = 2
key = "gfg"
 
# modifying the original list in-place using a list comprehension
test_list = [{k: (v[K] if k == key and isinstance(v, list) else v) for k, v in d.items()} for d in test_list]
 
# printing result
print("The Modified Dictionaries : " + str(test_list))

Output
The original list is : [{'gfg': [5, 7, 9, 1], 'is': 8, 'good': 10}, {'gfg': 1, 'for': 10, 'geeks': 9}, {'love': 3, 'gfg': [7, 3, 9, 1]}]
The Modified Dictionaries : [{'gfg': 9, 'is': 8, 'good': 10}, {'gfg': 1, 'for': 10, 'geeks': 9}, {'love': 3, 'gfg': 9}]

Time Complexity: O(n)
Auxiliary Space: O(n)

Method #4: Using for loop and try-except block

we can use a for loop to iterate over the dictionaries in the list, and a try-except block to check if the key is present and if the value is a list. If the conditions are satisfied, we can replace the value with the K-th element of the list.




# initializing list
test_list = [{'gfg': [5, 7, 9, 1], 'is': 8, 'good': 10},
             {'gfg': 1, 'for': 10, 'geeks': 9},
             {'love': 3, 'gfg': [7, 3, 9, 1]}]
 
# printing original list
print("The original list is : " + str(test_list))
 
# initializing K and key
K = 2
key = "gfg"
 
# using for loop and try-except block
for d in test_list:
    try:
        if isinstance(d[key], list):
            d[key] = d[key][K]
    except KeyError:
        pass
 
# printing result
print("The Modified Dictionaries : " + str(test_list))

Output
The original list is : [{'gfg': [5, 7, 9, 1], 'is': 8, 'good': 10}, {'gfg': 1, 'for': 10, 'geeks': 9}, {'love': 3, 'gfg': [7, 3, 9, 1]}]
The Modified Dictionaries : [{'gfg': 9, 'is': 8, 'good': 10}, {'gfg': 1, 'for': 10, 'geeks': 9}, {'love': 3, 'gfg': 9}]

Time complexity: O(nm) 
Where n is the number of dictionaries in the list and m is the maximum number of keys in any dictionary. This is because we need to iterate over each dictionary in the list and check each key to see if it matches the given key and whether the value is a list.
Auxiliary space: O(1) 
Because we are not creating any additional data structures. We are only modifying the existing list in place.

Method #5: Using map() function and lambda expression




# Python3 code to demonstrate working of
# Replace value by Kth index value in Dictionary List
# Using map() + lambda
 
# initializing list
test_list = [{'gfg': [5, 7, 9, 1], 'is': 8, 'good': 10},
             {'gfg': 1, 'for': 10, 'geeks': 9},
             {'love': 3, 'gfg': [7, 3, 9, 1]}]
 
# printing original list
print("The original list is : " + str(test_list))
 
# initializing K
K = 2
 
# initializing Key
key = "gfg"
 
# using map() function to modify the original list in-place
list(map(lambda sub: sub.update({key: sub[key][K]}) if isinstance(
    sub[key], list) else None, test_list))
 
# printing result
print("The Modified Dictionaries : " + str(test_list))

Output
The original list is : [{'gfg': [5, 7, 9, 1], 'is': 8, 'good': 10}, {'gfg': 1, 'for': 10, 'geeks': 9}, {'love': 3, 'gfg': [7, 3, 9, 1]}]
The Modified Dictionaries : [{'gfg': 9, 'is': 8, 'good': 10}, {'gfg': 1, 'for': 10, 'geeks': 9}, {'love': 3, 'gfg': 9}]

Time complexity: O(n), where n is the length of the list.
Auxiliary space: O(1), as the modification is done in-place without any additional data structure.


Article Tags :