1) You have this setup: logMonths = {"Jan":"01", "Feb":"02",...} yearTotals = { "2005":{"01":0, "02":0, ....} "2006": "2007": }
Then when you get a value such as "Jan", you look up the "Jan" in the logMonths dictionary to get "01". Then you use "01" and the year, say "2005", to look up the value in the yearTotals dictionary. Why do that? What is the point of even having the logMonths dictionary? Why not make "Jan" the key in the the "2005" dictionary and look it up directly: yearTotals = { "2005":{"Jan":0, "Feb":0, ....} "2006": "2007": } That way you could completely eliminate the lookup in the logMonths dict. 2) In this part: logMonth = logMonths[logLine[1]] currentYearMonth = yearTotals[logLine[4]][logMonth] # Update year/month value currentYearMonth += int(logLine[7]) yearTotals[logLine[4]][logMonth] = currentYearMonth I'm not sure why you are using all those intermediate steps. How about: yearTotals[logLine[4]][logLine[1]] += int(logLine[7]) To me that is a lot clearer. Or, you could do this: year, month, val = logLine[4], logLine[1], int(logLine[7]) yearTotals[year][month] += val 3) >I'm thinking there's an error in the way >I set my dictionaries up or reference them Yep. It's right here: for year in years: yearTotals.setdefault(year, monthTotals) Every year refers to the same monthTotals dict. You can use a dicts copy() function to make a copy: monthTotals.copy() Here is a reworking of your code that also eliminates a lot of typing: import calendar, pprint years = ["200%s" % x for x in range(5, 8)] print years months = list(calendar.month_abbr) print months monthTotals = dict.fromkeys(months[1:], 0) print monthTotals yearTotals = {} for year in years: yearTotals.setdefault(year, monthTotals.copy()) pprint.pprint(yearTotals) logs = [ ["", "Feb", "", "", "2007", "", "", "12"], ["", "Jan", "", "", "2005", "", "", "3"], ["", "Jan", "", "", "2005", "", "", "7"], ] for logLine in logs: year, month, val = logLine[4], logLine[1], int(logLine[7]) yearTotals[year][month] += val for x in yearTotals.keys(): print "KEY", "\t", "VALUE" print x, "\t", yearTotals[x] for y in yearTotals[x].keys(): print " ", y, "\t", yearTotals[x][y] -- http://mail.python.org/mailman/listinfo/python-list