findMember = filter(isMember, lines) dicMemberSet = {k:v for k, v in zip(map(splitIS, findMember), map(splitIS, findSet))} firstLevel = lambda line: line['FIELD_LEVEL']==lvl for r in lisRecords: print '>>> ', r['RECORD_NAME'] if r['RECORD_NAME'] == 'BPPO00': pdb.set_trace lvl=r['FIELDS'][0]['FIELD_LEVEL'] lisFields = filter(firstLevel, r['FIELDS']) for f in lisFields: if 'PICTURE' in f: at = attr.attribute(f['USAGE'], int(f['LENGTH']), picture=f['PICTURE']) else: at = attr.attribute(f['USAGE'], int(f['LENGTH'])) print f['FIELD_LEVEL'], ' - ', f['FIELD_NAME'], at for r in lisRecords: if r['RECORD_NAME'] == 'BPPO00': for f in r['FIELDS']: if 'PICTURE' in f: print f['FIELD_LEVEL'], ' - ', f['FIELD_NAME'], print f['USAGE'], f['LENGTH'], f['PICTURE'] else: print f['FIELD_LEVEL'], ' - ', f['FIELD_NAME'], print f['USAGE'], f['LENGTH']