how can I sort a bunch of lists over multiple fields?

El Pitonero pitonero at gmail.com
Sat Apr 30 08:47:16 EDT 2005


googleboy wrote:
>
> I am reading in a csv file that documents a bunch of different info
on
> about 200 books, such as title, author, publisher, isbn, date and
> several other bits of info too.
> ...
> I really want to be able to sort the list of books based on other
> criterium, and even multiple criteria (such as by author, and then by
> date.)

import string

input = open(r'c:\books.csv', 'r')
records = input.readlines()
input.close()

# assuming first line contains headers
headers = records.pop(0)
records = [x.strip().split(',') for x in records]

# header order
p_headers ='(title, author, publisher, isbn, date, other)'
p_sorts = '(author, title, date, publisher, other, isbn)'

temp_records = []
for r in records:
    exec '%(p_headers)s = r' % vars()
    exec 't = %(p_sorts)s' % vars()
    temp_records.append(t)

temp_records.sort()

sorted_records = []
for t in temp_records:
    exec '%(p_sorts)s = t' % vars()
    exec 'r = %(p_headers)s' % vars()
    sorted_records.append(r)

lines = [headers] + [','.join(x)+'\n' for x in sorted_records]
output = open(r'c:\output.csv', 'w')
output.writelines(lines) 
output.close()




More information about the Python-list mailing list