[Tutor] Making a dictionary of dictionaries from csv file

Alan Gauld alan.gauld at btinternet.com
Wed Dec 3 09:34:00 CET 2008

"Judith Flores" <juryef at yahoo.com> wrote

>   I have been trying to create a dictionary of dictionaries
> (and more dictionaries) from a csv file.

Your code below suffers from sloppiness in the number of []
which makes it hard to know exactly what the problem might be.
But in principle what you are doing is fine and should work
beyond 2 levels.

However I would suggest that it might be esier to use classes
instead of dictionaries. Dictionaries are fine for many things but
can become a bit tortuous to navigate and maintain.

> NameDayweighttemp
> name114537
> name135536
> name215936

I assume there should be some commas (or other separators)
in there? Othewise how do you expect the csv module to separate
the data?

> row={}
> maindict={}
> reader=DictReader(f)
> for row in reader:
> maindict[row['Name']=row

I assume you have a second closing ] after Name?

Also you are overwriting the row for each name. So you only
store the last entry. So you need to separate the data further.
Something like

maindict[row[name]] [row[day]] = (row.weight, row,temp)

Which would look like

{name1: {day1: (w,t), day2 : (w,t),
              day2: (w,t)},
name2: {day3: (w,t)....

Which looks a bit like what you want I think?

> then I can access the weight of a given name like this:
> wg=int(maindict[['name1']['weight'])

I assume thats a single open { before name1?

> My question is the following:
> How can I convert the csv to a dictionary that would have the 
> following structure?
> maindict = {
> 'name1' : {
> 'Day' : {
> 1 : { 'weight' : '45', 'temp' : '37' } ,
> 3 : { 'weight' : '55', 'temp' : '36' }
>  }
> },

See above


Alan Gauld
Author of the Learn to Program web site

More information about the Tutor mailing list