开发者

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:

  1. It will be great if the solution is a one liner or something which do not takes a for loop.
  2. 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.
  3. 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.
  4. 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))
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜