Return copy of dictionary excluding specified keys

Juicy picture Juicy · Jul 15, 2015 · Viewed 35.1k times · Source

I want to make a function that returns a copy of a dictionary excluding keys specified in a list.

Considering this dictionary:

my_dict = {
    "keyA": 1,
    "keyB": 2,
    "keyC": 3
}

A call to without_keys(my_dict, ['keyB', 'keyC']) should return:

{
    "keyA": 1
}

I would like to do this in a one-line with a neat dictionary comprehension but I'm having trouble. My attempt is this:

def without_keys(d, keys):
    return {k: d[f] if k not in keys for f in d}

which is invalid syntax. How can I do this?

Answer

Anshul Goyal picture Anshul Goyal · Jul 15, 2015

You were close, try the snippet below:

>>> my_dict = {
...     "keyA": 1,
...     "keyB": 2,
...     "keyC": 3
... }
>>> invalid = {"keyA", "keyB"}
>>> def without_keys(d, keys):
...     return {x: d[x] for x in d if x not in keys}
>>> without_keys(my_dict, invalid)
{'keyC': 3}

Basically, the if k not in keys will go at the end of the dict comprehension in the above case.