Python – Remove Dictionaries with Matching Values with K Key
Given two dictionary lists, remove all the dictionaries which have similar value of K key from other dictionary list.
Input : test_list = [{‘Gfg’ : 3, “is” : 3, “best” : 9},
{‘Gfg’ : 8, “is” : 4, “best” : 2},
{‘Gfg’ : 9, “is” : 2, “best” : 4},
{‘Gfg’ : 8, “is” : 10, “best” : 3},
{‘Gfg’ : 7, “is” : 1, “best” : 7}], check_list = [{‘Gfg’ : 8, “Best” : 1}, {“Best” : 2, “Gfg” : 7}], K = “Gfg”
Output : [{‘Gfg’: 3, ‘is’: 3, ‘best’: 9}, {‘Gfg’: 9, ‘is’: 10, ‘best’: 3}]
Explanation : All dictionaries with “Gfg”‘s value as 8 or 7 is removed.
Input : test_list = [{‘Gfg’ : 3, “is” : 3, “best” : 9},
{‘Gfg’ : 8, “is” : 4, “best” : 2}], check_list = [{‘Gfg’ : 8, “Best” : 1}, {“Best” : 2, “Gfg” : 7}], K = “Gfg”
Output : [{‘Gfg’: 3, ‘is’: 3, ‘best’: 9}]
Explanation : All dictionaries with “Gfg”‘s value as 8 or 7 is removed.
Method 1: Using list comprehension + dictionary comprehension
In this, we perform tasks of getting a set of elements using dictionary comprehension, and then a new list is constructed using list comprehension by testing K key’s values absence in the constructed set of values.
The whole task is conducted in two steps,
- All the unique values are extracted from check_list corresponding to key K using set().
- Each dictionary in test list is checked for key K‘s value, if it is present in set created in first step, then that dictionary is omitted in result, else dictionary is added as result.
Python3
test_list = [{ 'Gfg' : 3 , "is" : 3 , "best" : 9 },
{ 'Gfg' : 8 , "is" : 4 , "best" : 2 },
{ 'Gfg' : 1 , "is" : 2 , "best" : 4 },
{ 'Gfg' : 9 , "is" : 10 , "best" : 3 },
{ 'Gfg' : 7 , "is" : 1 , "best" : 7 }]
print ( "The original list is : " + str (test_list))
check_list = [{ 'Gfg' : 8 , "Best" : 1 }, { "Best" : 2 , "Gfg" : 7 }]
K = "Gfg"
temp = {sub[K] for sub in check_list}
res = [sub for sub in test_list if sub[K] not in temp]
print ( "Dictionary list after removal : " + str (res))
|
Output:
The original list is : [{‘Gfg’: 3, ‘is’: 3, ‘best’: 9}, {‘Gfg’: 8, ‘is’: 4, ‘best’: 2}, {‘Gfg’: 1, ‘is’: 2, ‘best’: 4}, {‘Gfg’: 9, ‘is’: 10, ‘best’: 3}, {‘Gfg’: 7, ‘is’: 1, ‘best’: 7}] Dictionary list after removal : [{‘Gfg’: 3, ‘is’: 3, ‘best’: 9}, {‘Gfg’: 1, ‘is’: 2, ‘best’: 4}, {‘Gfg’: 9, ‘is’: 10, ‘best’: 3}]
Time Complexity: O(n)
Auxiliary Space: O(1)
Method 2 : Using filter() function and lambda function
- Initialize the original list, test_list.
- Initialize the check dictionary list, check_list.
- Initialize the Key, K.
- Create a set of values from the Key in the check dictionary list.
- Use the filter() function with a lambda function that checks if the value of the Key in the dictionary is not in the set of values created in step 4. This will filter out all the dictionaries that have a value of K that matches with the set of values we created in step 4.
- Create a list from the filtered objects returned by the filter() function. This list will contain all the dictionaries that do not have a matching value for the Key K in the check_list.
Python3
test_list = [{ 'Gfg' : 3 , "is" : 3 , "best" : 9 },
{ 'Gfg' : 8 , "is" : 4 , "best" : 2 },
{ 'Gfg' : 1 , "is" : 2 , "best" : 4 },
{ 'Gfg' : 9 , "is" : 10 , "best" : 3 },
{ 'Gfg' : 7 , "is" : 1 , "best" : 7 }]
check_list = [{ 'Gfg' : 8 , "Best" : 1 }, { "Best" : 2 , "Gfg" : 7 }]
K = "Gfg"
temp = {sub[K] for sub in check_list}
res = list ( filter ( lambda x: x[K] not in temp, test_list))
print ( "Dictionary list after removal : " + str (res))
|
Output
Dictionary list after removal : [{'Gfg': 3, 'is': 3, 'best': 9}, {'Gfg': 1, 'is': 2, 'best': 4}, {'Gfg': 9, 'is': 10, 'best': 3}]
Time complexity: O(n), where n is the number of dictionaries in the original list, test_list.
Auxiliary space: O(m), where m is the number of dictionaries in the check_list.
Method 3: Using a for loop and a new list to store the desired output.
Here are the steps:
- Initialize the list result_list to an empty list.
- Loop through each dictionary in the test_list.
- Check if the value of the key K is in any of the dictionaries in the check_list.
- If it is not in any of the dictionaries, append the dictionary to the result_list.
- Print the result_list.
Python3
test_list = [{ 'Gfg' : 3 , "is" : 3 , "best" : 9 },
{ 'Gfg' : 8 , "is" : 4 , "best" : 2 },
{ 'Gfg' : 1 , "is" : 2 , "best" : 4 },
{ 'Gfg' : 9 , "is" : 10 , "best" : 3 },
{ 'Gfg' : 7 , "is" : 1 , "best" : 7 }]
check_list = [{ 'Gfg' : 8 , "Best" : 1 }, { "Best" : 2 , "Gfg" : 7 }]
K = "Gfg"
result_list = []
for dictionary in test_list:
if not any (K in d and d[K] = = dictionary[K] for d in check_list):
result_list.append(dictionary)
print ( "Dictionary list after removal : " + str (result_list))
|
Output
Dictionary list after removal : [{'Gfg': 3, 'is': 3, 'best': 9}, {'Gfg': 1, 'is': 2, 'best': 4}, {'Gfg': 9, 'is': 10, 'best': 3}]
The time complexity of this method is O(n*m), where n is the length of test_list and m is the length of check_list.
The auxiliary space complexity is O(k), where k is the length of result_list.
Last Updated :
21 Apr, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...