[Tutor] map & lambda to create dictionary from lists?

Lance E Sloan lsloan@umich.edu
Fri, 24 Aug 2001 09:09:04 -0400


The recent discussion of map and lambda coupled with a bit of ugly code
I wrote recently inspired me to learn more about these things.

What I've got are two sequences.  The first is a sequence of strings
that I want to use as the keys of a dictionary.  The second is a
sequence of objects (strings, numbers, whatever) that I want to use as
the values in the dictionary.  Of course, the two sequences have a
one-to-one correspondence.

Here's what I've come up with using map and lambda so far and I want to
know if it's Good:

    Python 2.0 (#1, Jan  8 2001, 10:18:58) 
    [GCC egcs-2.91.66 19990314 (egcs-1.1.2 release)] on sunos5
    Type "copyright", "credits" or "license" for more information.
    >>> d = {}
    >>> keys = ('name', 'age', 'food')
    >>> values = ('Monty', 42, 'spam')
    >>> junk = map(lambda k, v: d.update({k: v}), keys, values)
    >>> junk
    [None, None, None]
    >>> d
    {'name': 'Monty', 'age': 42, 'food': 'spam'}

Okay, so it works.  The list returned by map isn't all that useful,
other than maybe for finding out how many pairs were processed.  I feel
like I'm not using map the way it was intended.  Is this a Bad Thing?

More importantly, is there a better way to do this?  I'd rather not
reinvent the wheel with this.

What I'm actually going to use this for is to turn a row of data
fetched from an Oracle database using DCOracle's fetchone into a
dictionary.  DCOracle's cursor object has a description attribute
that's a tuple of tuples.  Each inner tuple contains the name of a
column, its data type, and other stuff.  So, I would probably invoke
map like this:

	junk = map(lambda k, v: d.update({k[0]: v}), csr.description, row)

I use k[0] because the very first element of the inner tuple is the
name of the column that I want to use as the key.

--
Lance E Sloan
Web Services, Univ. of Michigan: Full-service Web and database design,
development, and hosting.  Specializing in Python & Perl CGIs.
http://websvcs.itd.umich.edu/ - "Putting U on the Web"