[Tutor] Dictionary of dictionaries of dictionaries of lists.

Morten Liebach m at mongers.org
Wed Jul 7 12:36:40 CEST 2004


Hi

I'm writing code to generate my static weblog pages, later rsync'ed to
the server (I can't and won't run serverside programs on it), from a
PostgreSQl database.
Each entry have a 'id' and 'date' field, and I want a datastructure of a
dictionary (named "entries") with years as keys, values of a dictionary
with months as keys, holding a dictionary with days as keys, value of a
list of id's for entries that day.

I have the following code:

"""
import psycopg

connection = psycopg.connect("dbname=blog user=m")
cursor = connection.cursor()

cursor.execute("SELECT id, date FROM blog")
idx = cursor.fetchall()
entries = {}
for i in range(len(idx)):
    entries[idx[i][1].year] = \
            {idx[i][1].month : {idx[i][1].day : [].append(idx[i][0])}}

print idx[23]
print entries[2004]
"""

The output:
"""
(30, <DateTime object for '2003-03-02 19:44:58.00' at 3c118a68>)
{4: {20: None}}
"""

The first line is OK, but in the second one I  expected something more
like:
"""
{1: {1: [67], 3: [68], 4: [69, 70]}, 2: {17: [71]}}
"""

(Not exactly the entries in my database, there's a lot more, but you get
the picture I hope)

I'm clearly doing something wrong.  Something's missing, but what, and
(more important) why?  I might have stared myself blind on this problem
by now, so I need a push. :-)  Maybe even a rethink of it all.

I'm a python beginner, but not new to programming.  I've been doing
mostly perl and some C# the last year.

I use OpenBSD 3.5-current, Python 2.3.3, psycopg 1.1.11, mxDateTime
2.0.5 and PostgreSQL 7.4.2.

Have a nice day
                                 Morten

-- 
http://m.mongers.org/ -- http://gallery.zentience.org/
__END__


More information about the Tutor mailing list