jason schrieb: > Hello, > > I am completely new to python and I have question that I unfortunately > could not find in the various documentation online. My best guess is > that the answer should be quitte easy but I have just enterd the learning > phase so that means a hightend chance for stupidity and mistakes on my > part. > > I am trying to fill a nested dictionary from parsing a logfile. However > each time there is only one key entry created and that's it. Just > one entry, while the keys are different. That's 100% sure. I think > therefore that it is an assignment error in my part. [there we have it...] > > To give an static example of the datastructure that I am using to clear > any confusion on the datastructure part: > > records = { 'fam/jason-a' : { > 'date' : 'Fri Sep 8 16:45:55 2006', > 'from' : 'jason', > 'subject' : 'Re: Oh my goes.....', > 'msize' : '237284' }, > 'university/solar-system' : { > 'date' : 'Fri Sep 8 16:45:46 2006', > 'from' : 'jd', > 'subject' : 'Vacancies for students', > 'msize' : '9387' } > } > > Looping over this datastructure is no problem. > rkeys = ['date', 'from', 'subject', 'msize'] > for folder in records.keys(): > print '--' > print folder > for key in rkeys: > print records[folder][key] > > Now for the actual program/dynamic part - assignment in the loop I use the > following function. Note `datum' is not a date object, just a string. > > def parselog(data): > other = 0 > records = {} > > for line in string.split(data, '\n'): > str = line.strip() > if str[:4] == 'From': > mfrom, datum = extrfrom(str), extrdate(str) > print datum, mfrom > elif str[:4] == 'Fold': > folder = extrfolder(str[8:]) > records = {folder : { 'date' : datum, 'mesgbytes' : > extrmsize(str[8:]), 'mesgcount' : 1}} > else: > other += 1 > > displrec(records) > > Note, this is not ment as a collision type datastructure, all initial data > entries are unique. My question: Where is my assignment e.g. records = > {folder.... wrong ?
What you essentially do is this: records = {"some" : "dict"} records = {"some other" : "dict"} You rebind the name records to a new dictionary. So all your previously stored data is garbage collected. What you most probably want to do (I'm a bit confused about your code & too lazy to dig deeper): records = {} records[folder] = {'date' : ...} Notice that the dict[key]=value syntax mutates the existing dictionary. Diez -- http://mail.python.org/mailman/listinfo/python-list