using zip() and dictionaries

Arnaud Delobelle arnodel at googlemail.com
Thu Apr 30 14:48:09 EDT 2009


Sneaky Wombat <joe.hrbek at gmail.com> writes:

> I'm really confused by what is happening here.  If I use zip(), I
> can't update individual dictionary elements like I usually do.  It
> updates all of the dictionary elements.  It's hard to explain, so here
> is some output from an interactive session:
>
> In [52]: header=['a','b','c','d']
> In [53]: columnMap={}
> In [54]: for (k,v) in zip(header,[[]]*len(header)):
>    ....:     #print "%s,%s"%(k,v)
>    ....:     columnMap[k] = v
>    ....:
> In [55]: columnMap
> Out[55]: {'a': [], 'b': [], 'c': [], 'd': []}
> In [56]: columnMap['a'].append('something')
> In [57]: columnMap
> Out[57]:
> {'a': ['something'],
>  'b': ['something'],
>  'c': ['something'],
>  'd': ['something']}
>
> Why does ['something'] get attached to all columnMap elements instead
> of just element 'a'?
>
>
> In [58]: columnMap={'a': [], 'b': [], 'c': [], 'd': []}
> In [59]: columnMap['a'].append('something')
> In [60]: columnMap
> Out[60]: {'a': ['something'], 'b': [], 'c': [], 'd': []}
>
> creating the dictionary without using zip, it works as normal.

It's a FAQ:

http://www.python.org/doc/faq/programming/#how-do-i-create-a-multidimensional-list

-- 
Arnaud



More information about the Python-list mailing list