[Python-Dev] Re: A small proposed change to dictionaries' "get" method

Guido van Rossum guido@beopen.com
Fri, 04 Aug 2000 10:46:57 -0500


[Skip]
> eh... I don't like these do two things at once kind of methods.  I see
> nothing wrong with
> 
>     >>> dict = {}
>     >>> dict['hello'] = dict.get('hello', [])
>     >>> dict['hello'].append('world')
>     >>> print dict
>     {'hello': ['world']}
> 
> or
> 
>     >>> d = dict['hello'] = dict.get('hello', [])
>     >>> d.insert(0, 'cruel')
>     >>> print dict
>     {'hello': ['cruel', 'world']}
> 
> for the obsessively efficiency-minded folks.

Good!  Two lines instead of three, and only two dict lookups in the
latter one.

> Also, we're talking about a method that would generally only be useful when
> dictionaries have values which were mutable objects.  Irregardless of how
> useful instances and lists are, I still find that my predominant day-to-day
> use of dictionaries is with strings as keys and values.  Perhaps that's just
> the nature of my work.

Must be.  I have used the above two idioms many times -- a dict of
lists is pretty common.  I believe that the fact that you don't need
it is the reason why you don't like it.

I believe that as long as we agree that

  dict['hello'] += 1

is clearer (less strain on the reader's brain) than

  dict['hello'] = dict['hello'] + 1

we might as well look for a clearer way to spell the above idiom.

My current proposal (violating my own embargo against posting proposed
names to the list :-) would be

  dict.default('hello', []).append('hello')

--Guido van Rossum (home page: http://www.pythonlabs.com/~guido/)