[Tutor] Having trouble with a dictionary of lists
Emile van Sebille
emile at fenx.com
Thu Sep 3 20:26:35 CEST 2009
On 9/3/2009 11:01 AM William Witteman said...
> I am trying to create a CSV file of sorted similar lists, arranged so
> that differences are easily compared in a spreadsheet. I am
> encountering the following error, however:
>
> IndexError: list assignment index out of range
>
> On the indicated line below. I understand the error, but I don't
> understand why I am getting it. Can anyone shed some light on this?
> Thanks.
>
> #!/usr/bin/python
>
> """
> Take a collection of lists, combine them into one list, deleting duplicates.
> Sort the list and use it as the leftmost column of a table. Then put each
> lists contents into the table, one per column, with the elements aligned
> with the leftmost (index) column.
>
> """
>
> import os, sys, csv
>
> def cmpss(filename,*sslists):
> """Write a CSV file from the collection of lists."""
>
> if os.path.exists(filename):
> print("%s exists: please choose another filename." % filename)
> sys.exit(1)
> else:
> try:
> fn = csv.writer(open(filename, "w"))
> except IOError:
> print("There is a problem opening the requested file. Sorry.")
> sys.exit(1)
>
> termdict = {}
>
> for sslist in sslists:
> for term in sslist:
> termdict[term] = ""
>
> termlist = termdict.keys()
> termlist.sort()
>
> sortedtermdict = {}
> number_of_commas = 1 - len(sslists)
>
> for term in termlist:
> sortedtermdict[term] = ["" for x in range(number_of_commas)]
>
> for sslist in sslists:
> counter = 0
> for term in sslist:
> # The line below is where my program barfs.
> sortedtermdict[term][counter] = term
> counter = counter + 1
This increases counter once for each term in sslist, but
sortedtermdict[term]'s length is a function of the number_of_commas, so
when termlist if longer then number_of_commas, you'd get the error.
HTH,
Emile
>
> for row in sortedtermdict:
> fn.writerow(row)
>
More information about the Tutor
mailing list