Newbie question: Dictionary of lists
Kossmann, Bill
BKossmann at dthr.ab.ca
Wed Feb 16 11:50:55 EST 2000
Hello, Python gurus!
As part of my first Python effort, I need to implement a dictionary of
lists. Basically, I need to read a history file containing account codes,
period names, and amounts; the dictionary's key is a concatenation of the
account codes, and the values are 12-element lists (one for each month). I
want a sample dictionary entry to look like this:
{'00006101071115000000': [10, 20, 30 ... 120]}
so that when I need to access March data for cost centre
'00006101071115000000', all I have to do something like:
history['00006101071115000000'][2]
Trouble is, when I implement my FOR loop as below, *all* of the dictionary's
January elements are updated to the value of the last January item in the
history file. I've searched high and low for a solution, but I'm stumped.
I've put the relevant code and the input file inline below my signature;
does anyone see what I'm doing wrong here? Thanks very much for any hints
or pointers you can offer!
Yours in gratitude,
Bill
p.s. I'm running Python 1.5.2 on NT 4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Bill Kossmann, CGA
Business Analyst
David Thompson Health Region
Red Deer, Alberta, Canada
ph 403 343 4463
fx 403 343 4697
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# TEST.PY ============================================================
import string
history = {}
history['DEFAULT'] = [31,29,31,30,31,30,31,31,30,31,30,31]
# Null elements - one for each month of the year (Jan ... Dec)
nullList = ['', '', '', '', '', '', '', '', '', '', '', '']
# Short test file (16000 lines in production)
histFile = open("2000.txt", "r")
for histLine in histFile.readlines():
histRcd = string.split(histLine, ",")
# Key is our cost centre code
dictionaryKey = histRcd[0]+histRcd[1]+histRcd[2]+histRcd[3]
# Null list required to add an element if it's not the first element
if not history.has_key(dictionaryKey):
history[dictionaryKey] = nullList
# Obviously must evaluate for other months, but January will do for testing
if (histRcd[4][:3] == 'JAN'):
history[dictionaryKey][0] = float(string.strip(histRcd[5]))
# Print out stuff for debugging as data is read into dictionary
print history, '\n'
# Check the results
print '\n'
for data in history.keys():
print data, '\t', history[data], '\n'
histFile.close()
# 2000.TXT ===========================================================
00,006,1010,71115000000,APR-00,116086.78
00,006,1010,71115000000,AUG-00,609247.99
00,006,1010,71115000000,DEC-00,1137682.76
00,006,1010,71115000000,FEB-00,1061321.95
00,006,1010,71115000000,JAN-00,1060712.34
00,006,1010,71115000000,JUL-00,503767.58
00,006,1010,71115000000,JUN-00,377198.08
00,006,1010,71115000000,MAY-00,264693.16
00,006,1010,71115000000,NOV-00,1004264.5
00,006,1010,71115000000,OCT-00,868372.67
00,006,1010,71115000000,SEP-00,739740.11
00,006,1010,71115900000,APR-00,17508.32
00,006,1010,71115900000,AUG-00,-328862.2
00,006,1010,71115900000,DEC-00,-199854.91
00,006,1010,71115900000,FEB-00,-138890.05
00,006,1010,71115900000,JAN-00,-138890.05
00,006,1010,71115900000,JUL-00,285846
00,006,1010,71115900000,JUN-00,257857.71
00,006,1010,71115900000,MAY-00,227246.56
00,006,1010,71115900000,NOV-00,-293133.9
00,006,1010,71115900000,OCT-00,-364361.44
00,006,1010,71115900000,SEP-00,-431565.48
00,006,1010,71115950000,APR-00,-2751.23
00,006,1010,71115950000,AUG-00,56302.45
00,006,1010,71115950000,DEC-00,87618.3
00,006,1010,71115950000,FEB-00,87618.3
00,006,1010,71115950000,JAN-00,87618.3
00,006,1010,71115950000,JUL-00,-3098.64
00,006,1010,71115950000,JUN-00,-13041.97
00,006,1010,71115950000,MAY-00,29.51
00,006,1010,71115950000,NOV-00,76108.28
More information about the Python-list
mailing list