On Apr 30, 2:00 pm, Sneaky Wombat <joe.hr...@gmail.com> wrote: > quick update, > > #change this line: > for (k,v) in zip(header,[[]]*len(header)): > #to this line: > for (k,v) in zip(header,[[],[],[],[]]): > > and it works as expected. Something about the [[]]*len(header) is > causing the weird behavior. I'm probably using it wrong, but if > anyone can explain why that would happen, i'd appreciate it. My guess > is that it's iterating through the the whole dictionary because of the > value on the right in zip(). > > On Apr 30, 12:45 pm, Sneaky Wombat <> wrote: > > > 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. > >
You figured out your original question, I just wanted to point out that your code as posted is less efficient than it could be. Rather than creating a list of empty lists to feed to zip() you could just assign a new empty list to columnMap in your loop body, like so: In [54]: for k in header: ....: columnMap[k] = [] That avoids creating a list of lists just to pass to zip() the call to zip() too. ~S -- http://mail.python.org/mailman/listinfo/python-list