Sunday, November 17, 2024
Google search engine
HomeLanguagesPython – Remove dictionary from a list of dictionaries if a particular...

Python – Remove dictionary from a list of dictionaries if a particular value is not present

Given a list of dictionaries, remove all dictionaries which don’t have K as a value.

Examples:

Input : test_list = [{"Gfg" : 4, "is" : 8, "best" : 9}, {"Gfg" : 3, "is": 7, "best" : 5}], K = 7 
Output : [{'Gfg': 4, 'is': 8, 'best': 9}] 
Explanation : Resultant dictionary doesn't contain 7 as any element.
Input : test_list = [{"Gfg" : 4, "is" : 7, "best" : 9}, {"Gfg" : 3, "is": 7, "best" : 5}], K = 7 
Output : [] 
Explanation : All contain 7 as element in List. 

Method #1 : Using loop + values()

This is one of the ways in which this task can be performed. In this, we perform the task of iterating for all the dictionaries using a loop and check for value presence using values().

Python3




# Python3 code to demonstrate working of
# Remove dictionary if K value not present
# Using loop + values()
 
# Initializing lists
test_list = [{"Gfg": 4, "is": 8, "best": 9},
             {"Gfg": 5, "is": 8, "best": 1},
             {"Gfg": 3, "is": 7, "best": 6},
             {"Gfg": 3, "is": 7, "best": 5}]
 
# Printing original list
print("The original list : " + str(test_list))
 
# initializing K
K = 7
 
res = []
 
# Checking for K element
# using loop
for sub in test_list:
    if K not in list(sub.values()):
        res.append(sub)
 
# Printing result
print("Filtered dictionaries : " + str(res))


Output

The original list : [{'Gfg': 4, 'is': 8, 'best': 9}, {'Gfg': 5, 'is': 8, 'best': 1}, {'Gfg': 3, 'is': 7, 'best': 6}, {'Gfg': 3, 'is': 7, 'best': 5}]
Filtered dictionaries : [{'Gfg': 4, 'is': 8, 'best': 9}, {'Gfg': 5, 'is': 8, 'best': 1}]

Method #2: Using list comprehension

This is yet another way in which this task can be performed. In this, we extract all the values using one-liner using list comprehension. The values are extracted using values().

Python3




# Python3 code to demonstrate working of
# Remove dictionary if K value not present
# Using list comprehension
 
# initializing lists
test_list = [{"Gfg" : 4, "is" : 8, "best" : 9},
             {"Gfg" : 5, "is": 8, "best" : 1},
             {"Gfg" : 3, "is": 7, "best" : 6},
             {"Gfg" : 3, "is": 7, "best" : 5}]
 
# printing original list
print("The original list : " + str(test_list))
 
# initializing K
K = 7
 
res = []
 
# using one-liner to extract dicts with NO K value
# using not in operator to check presence
res = [sub for sub in test_list if K not in list(sub.values())]
 
# printing result
print("Filtered dictionaries : " + str(res))


Output

The original list : [{'Gfg': 4, 'is': 8, 'best': 9}, {'Gfg': 5, 'is': 8, 'best': 1}, {'Gfg': 3, 'is': 7, 'best': 6}, {'Gfg': 3, 'is': 7, 'best': 5}]
Filtered dictionaries : [{'Gfg': 4, 'is': 8, 'best': 9}, {'Gfg': 5, 'is': 8, 'best': 1}]

Method #3: Using filter() and lambda function:

The function takes a list of dictionaries test_list and a value K as input. If the test_list is empty, the function returns an empty list. If the first dictionary in test_list contains the value K, the function returns a list containing that dictionary concatenated with the result of calling remove_dict_without_K with the rest of the list and the same value of K. Otherwise, the function simply returns the result of calling remove_dict_without_K with the rest of the list and the same value of K.

Python3




def remove_dict_without_K(test_list, K):
    if not test_list:
        return []
    elif K in test_list[0].values():
        return [test_list[0]] + remove_dict_without_K(test_list[1:], K)
    else:
        return remove_dict_without_K(test_list[1:], K)
# initializing lists
test_list = [{"Gfg" : 4, "is" : 8, "best" : 9},
             {"Gfg" : 5, "is": 8, "best" : 1},
             {"Gfg" : 3, "is": 7, "best" : 6},
             {"Gfg" : 3, "is": 7, "best" : 5}]
 
# printing original list
print("The original list : " + str(test_list))
 
# initializing K
K = 7
 
res = list(filter(lambda x: K not in x.values(), test_list))
 
# printing result
print("Filtered dictionaries : " + str(res))


Output

The original list : [{'Gfg': 4, 'is': 8, 'best': 9}, {'Gfg': 5, 'is': 8, 'best': 1}, {'Gfg': 3, 'is': 7, 'best': 6}, {'Gfg': 3, 'is': 7, 'best': 5}]
Filtered dictionaries : [{'Gfg': 4, 'is': 8, 'best': 9}, {'Gfg': 5, 'is': 8, 'best': 1}]

Time complexity: O(nm), where n is the length of test_list and m is the average number of key-value pairs in each dictionary. 
Auxiliary Space: O(nm), where n is the length of test_list and m is the average number of key-value pairs in each dictionary. 

Method 4: Using dictionary comprehension method.

Steps: 

  1. Initialize an empty dictionary to store the filtered dictionaries.
  2. Use a dictionary comprehension to iterate through each dictionary in the given list and filter out the dictionaries that have K as one of the values,
  3. Print the resulting dictionary of filtered dictionaries.

Python3




# Python3 code to demonstrate working of
# Remove dictionary if K value not present
# Using dictionary comprehension
 
# Initializing lists
test_list = [{"Gfg": 4, "is": 8, "best": 9},
             {"Gfg": 5, "is": 8, "best": 1},
             {"Gfg": 3, "is": 7, "best": 6},
             {"Gfg": 3, "is": 7, "best": 5}]
 
# Printing original list
print("The original list : " + str(test_list))
 
# Initializing K
K = 7
 
# using dictionary comprehension to filter dictionaries
filtered_dict = {str(i): dict_val for i, dict_val in enumerate(
    test_list) if K not in dict_val.values()}
 
# Printing result
print("Filtered dictionaries : " + str(list(filtered_dict.values())))


Output

The original list : [{'Gfg': 4, 'is': 8, 'best': 9}, {'Gfg': 5, 'is': 8, 'best': 1}, {'Gfg': 3, 'is': 7, 'best': 6}, {'Gfg': 3, 'is': 7, 'best': 5}]
Filtered dictionaries : [{'Gfg': 4, 'is': 8, 'best': 9}, {'Gfg': 5, 'is': 8, 'best': 1}]

Time complexity: O(n), where n is the number of dictionaries in the list. 
Auxiliary space: O(n), as we are creating a new dictionary to store the filtered dictionaries.

Dominic Rubhabha-Wardslaus
Dominic Rubhabha-Wardslaushttp://wardslaus.com
infosec,malicious & dos attacks generator, boot rom exploit philanthropist , wild hacker , game developer,
RELATED ARTICLES

Most Popular

Recent Comments