Delete a dictionary from another dictionary python
If A and B are two dictionaries, using python, is there any way of removing elements from Dictionary A that are in dictionary B?
For example,
parent_dict = {"a" : "aaa", "b" : "bbb", "c" : "ccc", "d" : "ddd", "e": "eee"}
derived_dict = {"a" : "aaa", "d" : "ddd", "e" : "eee"}
Now I need to write a function dict_reduce(dictA, 开发者_运维知识库dictB) which deletes all the elements of dictB from dictA.
(i.e.,) dict_reduce(parent_dict, derived_dict) should give {"b" : "bbb", "c" : "ccc"}
My work around with a for loop is:
def dict_reduce(parent_dict, child_dict):
for key in child_dict.keys():
del parent_dict[key]
return parent_dict
reduced_dict = dict_reduce(parent_dict, child_dict)
NOTE:
- It will be great if the solution is a one liner or something which do not takes a for loop.
- Also we need not to check whether parent dictionary has the key before deleting, since the child dictionary is derived from the parent dictionary. So need not think about keyError.
- The parent dictionary is a static dictionary which should not be affected by the method. Instead the returning dictionary should be stored in another reduced dictionary.
- There is no need to check whether the child_dict has same key as that of parent_dict. Only the key matters.
{k: v for k, v in parent_dict.items() if k not in derived_dict}
Using the dictionaries provided in the question:
dict(parent_dict.items() - derived_dict.items()) or
dict(parent_dict.items() ^ derived_dict.items())
map(lambda k: del parent_dict[k], child_dict.keys())
If affect parent_dict
is what you want this does the job
map(parent_dict.pop, filter(lambda k: k in derived_dict, parent_dict))
(and also returns duplicate keys)
This variant will also check (if requiered) that also values match:
map(parent_dict.pop, filter(lambda k: k in derived_dict and derived_dict[k] == parent_dict[k], parent_dict))
精彩评论