[Tutor] omit some keys from dict

Remco Gerlich scarblac@pino.selwerd.nl
Thu, 7 Feb 2002 19:58:34 +0100


On  0, Sean 'Shaleh' Perry <shalehperry@attbi.com> wrote:
> >>> j= {1:'hello',2:'fine',3:'python',4:'dicts',5:'lists',6:'tuples'}
> >>> omit = [1,3,5]
> >>> filter(lambda key, omit = omit: key not in omit, j.keys())
> [6, 4, 2]
> 
> That will work even under 1.5.2.  Under 2.1 and above the 'omit = omit' can be
> left out.  If it were not for the need to place 'omit' in the scope of the
> lambda I find the filter call much more readable.

Right, I left out the 'omit = omit' because I'm used to 2.1 code. 2.1 is
about ten months old; 1.5.2 about three years. All my thesis code is 2.1
style code. I expect that most newbies have downloaded Python recently. So
I'm not posting legacy code anymore unless there's a specific reason for it.

My personal guidelines for using filter/map/lambda:

I like filter better if it is a 'pure filter', like the one above.
The expression in the list comprehension is just the variable - 
[x for x in xs if ...].

I like map if and only if the function already exists and a lambda isn't
necessary - map(str, range(10)).

If the situation is even a little more complex than this, I prefer the list
comprehension. [str(i)+"%" for i in range(10)] instead of 
map(lambda i: str(i)+"%", range(10)).


-- 
Remco Gerlich