Behaviour of pop() for dictionaries

BlindAnagram blindanagram at nowhere.org
Sun Jun 13 12:19:02 EDT 2021


The pop() method exists for five mainstream data items and shows a range 
of different behaviours for each of them.

But, of the five, pop for dictionaries is the only one for which the 
first parameter is required and this makes d.pop() for dictionaries an 
error rather than doing something useful.

I came across this in trying to use this sequence for a dictionary <d>:

   if len(d.keys()) == 1:
     v = d.pop()

I found it surprising that this failed given how the pops for the other 
types work.

So I then tried:

   v = d.values()[0]

and this doesn't work either since dict_keys items don't accept 
indexing. So I was driven to use:

   v = list(d.values())[0]

which seems to me a lot less intuitive (and messier) than d.pop().

These:

   v = next(iter(d.values()))
   v, = d.values()

also seem poor substitutes for giving d.pop() for dictionaries a useful 
and intuitive purpose.

Am I missing the obvious way to obtain the value (or the key) from a 
dictionary that is known to hold only one item?

More importantly, is there a good reason why we don't have d.pop() for 
dictionaries?

    Brian


More information about the Python-list mailing list