Remove key from dictionary in Python returning new dictionary

Question:

I have a dictionary

d = {'a':1, 'b':2, 'c':3}

I need to remove a key, say c and return the dictionary without that key in one function call

{'a':1, 'b':2}

d.pop(‘c’) will return the key value – 3 – instead of the dictionary.

I am going to need one function solution if it exists, as this will go into comprehensions

Asked By: Xeos

||

Answers:

How about this:

{i:d[i] for i in d if i!='c'}

It’s called Dictionary Comprehensions and it’s available since Python 2.7.

or if you are using Python older than 2.7:

dict((i,d[i]) for i in d if i!='c')
Answered By: jh314

Why not roll your own? This will likely be faster than creating a new one using dictionary comprehensions:

def without(d, key):
    new_d = d.copy()
    new_d.pop(key)
    return new_d
Answered By: Gustav Larsson

this will work,

(lambda dict_,key_:dict_.pop(key_,True) and dict_)({1:1},1)

EDIT
this will drop the key if exist in the dictionary and will return the dictionary without the key,value pair

in python there are functions that alter an object in place, and returns a value instead of the altered object, {}.pop function is an example.

we can use a lambda function as in the example, or more generic below
(lambda func:obj:(func(obj) and False) or obj)
to alter this behavior, and get a the expected behavior.

Answered By: sinaiy

When you invoke pop the original dictionary is modified in place.

You can return that one from your function.

>>> a = {'foo': 1, 'bar': 2}
>>> a.pop('foo')
1
>>> a
{'bar': 2}
Answered By: Felix Yuan

If you need an expression that does this (so you can use it in a lambda or comprehension) then you can use this little hack trick: create a tuple with the dictionary and the popped element, and then get the original item back out of the tuple:

(foo, foo.pop(x))[0]

For example:

ds = [{'a': 1, 'b': 2, 'c': 3}, {'a': 4, 'b': 5, 'c': 6}]
[(d, d.pop('c'))[0] for d in ds]
assert ds == [{'a': 1, 'b': 2}, {'a': 4, 'b': 5}]

Note that this actually modifies the original dictionary, so despite being a comprehension, it’s not purely functional.

Answered By: z0r

solution from me

item = dict({"A": 1, "B": 3, "C": 4})
print(item)
{'A': 1, 'B': 3, 'C': 4}

new_dict = (lambda d: d.pop('C') and d)(item)
print(new_dict)
{'A': 1, 'B': 3}
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.