Re: Appending to dictionary of lists

2011-05-03 Thread Paul Rubin
Alex van der Spek zd...@xs4all.nl writes:
 refd=dict.fromkeys(csvr.fieldnames,[])  ...
 I do not understand why this appends v to every key k each time.

You have initialized every element of refd to the same list.  Try

refd = dict((k,[]) for k in csvr.fieldnames)

instead.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Appending to dictionary of lists

2011-05-03 Thread Dan Stromberg
On Tue, May 3, 2011 at 12:56 PM, Paul Rubin no.email@nospam.invalid wrote:

 Alex van der Spek zd...@xs4all.nl writes:
  refd=dict.fromkeys(csvr.fieldnames,[])  ...
  I do not understand why this appends v to every key k each time.

 You have initialized every element of refd to the same list.  Try

refd = dict((k,[]) for k in csvr.fieldnames)

 instead.
 --
 http://mail.python.org/mailman/listinfo/python-list


Agreed.  Here's another way: using a dictionary comprehension - a feature in
2.7 and up:

#!/usr/local/cpython-2.7/bin/python

import csv
import pprint

csvf=open('foo.csv','rb')
csvr=csv.DictReader(csvf)
#refd=dict.fromkeys(csvr.fieldnames, [])
refd = { key: [] for key in csvr.fieldnames }
for row in csvr:
   for (k,v) in row.items():
  refd[k].append(v)

pprint.pprint(refd)
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Appending to dictionary of lists

2011-05-03 Thread Alex van der Spek

Thank you! Would never have found that by myself.


Paul Rubin no.email@nospam.invalid wrote in message 
news:7x7ha75zib@ruckus.brouhaha.com...

Alex van der Spek zd...@xs4all.nl writes:

refd=dict.fromkeys(csvr.fieldnames,[])  ...
I do not understand why this appends v to every key k each time.


You have initialized every element of refd to the same list.  Try

   refd = dict((k,[]) for k in csvr.fieldnames)

instead. 


--
http://mail.python.org/mailman/listinfo/python-list