Without knowing more details about the origin of the data, the solution I would like to make is to consider using namedtuple if it is possible to change the data storage structure. This will make things cleaner and more readable.
Here is an example:
>>> from collections import namedtuple >>> Record = namedtuple('Record', ['date', 'id', 'code', 'status']) >>> records = [] >>> records.append(Record('08132012', 'id01', '02343','P')) >>> records.append(Record('08132012', 'id01', '03343','F')) >>> records.append(Record('08132012', 'id02', '18131','F')) >>> records.append(Record('08132012', 'id02', '07777','F')) >>> for record in records: ... print "Date: %s" %record.date ... print "Processing id: %s" %record.id ... print record.code ... print record.status ... Date: 08132012 Processing id: id01 02343 P Date: 08132012 Processing id: id01 03343 F Date: 08132012 Processing id: id02 18131 F Date: 08132012 Processing id: id02 07777 F
More fun:
Get a list of entries where status is 'F':
>>> Fs = [record for record in records if record.status == 'F'] >>> Fs [Record(date='08132012', id='id01', code='03343', status='F'), Record(date='08132012', id='id02', code='18131', status='F'), Record(date='08132012', id='id02', code='07777', status='F')]
Sort by code :
>>> records.append(Record('08122012', 'id03', '00001', 'P')) >>> records.sort(key=lambda x:x.code) >>> records [Record(date='08122012', id='id03', code='00001', status='P'), Record(date='08132012', id='id01', code='02343', status='P'), Record(date='08132012', id='id01', code='03343', status='F'), Record(date='08132012', id='id02', code='07777', status='F'), Record(date='08132012', id='id02', code='18131', status='F')]