[EMAIL PROTECTED] wrote: > Hi - I want to take something like ... > > lstIn = [] > lstIn.append({'COM_AUTOID': 1, 'PRG_AUTOID': 10, 'LEA_AUTOID': 1000}) > lstIn.append({'COM_AUTOID': 1, 'PRG_AUTOID': 11, 'LEA_AUTOID': 2000}) > lstIn.append({'COM_AUTOID': 1, 'PRG_AUTOID': 11, 'LEA_AUTOID': 2001}) > lstIn.append({'COM_AUTOID': 1, 'PRG_AUTOID': 11, 'LEA_AUTOID': 2003}) > lstIn.append({'COM_AUTOID': 1, 'PRG_AUTOID': 12, 'LEA_AUTOID': 3000}) > lstIn.append({'COM_AUTOID': 1, 'PRG_AUTOID': 12, 'LEA_AUTOID': 3001}) > lstIn.append({'COM_AUTOID': 1, 'PRG_AUTOID': 12, 'LEA_AUTOID': 3002}) > lstIn.append({'COM_AUTOID': 1, 'PRG_AUTOID': 12, 'LEA_AUTOID': 3003}) > lstIn.append({'COM_AUTOID': 2, 'PRG_AUTOID': 110, 'LEA_AUTOID': 4000}) > > > ... and produce something like ... > > sampleOut = > [[1,[10,1000]],[1,[11,[2000,2001,2003]]],[1,[12,[3000,3001,3002,3003]]],[2,[110,4000]] > > > Well I've now been around the block a few times with this one and I'm > still frowning !! In the process my code has become uglier and uglier - > I'm sure there must be quite an elegant way of dealing with it - could > anyone give me a push in the right direction ? > > Just to provide some motivation here - I should just say that this is > cut down test case - the real problem involves creating a Javascript > structure which in turn defines a three level menu. > > The resulting JS will be something like this, I think you can see how > the nested loops get into it.: > > var MENU_ITEMS = [ > { pos:'relative', leveloff:[b,a], itemoff:[d,c], size:[e,f], ... }, > { ...Item 1... }, > { ...Item 2... , > sub:[ > { ...level format... }, > { ...Item 1... }, > { ...Item 2... }, > { ...Item 3... , > sub:[ > { ...level format... }, > { ...Item 1... }, > { ...Item 2... }, > { ...Item 3... }, > { ...Item 4... } > ] > }, > { ...Item 4... }, > ] > }, > { ...Item 3... } > ]; > > Interested to hear of any smart/elegant ideas. > > thanks > > Richard. > Might not be 'elegant', but at least it works.
-Larry lstIn = [] lstIn.append({'COM_AUTOID': 1, 'PRG_AUTOID': 10, 'LEA_AUTOID': 1000}) lstIn.append({'COM_AUTOID': 1, 'PRG_AUTOID': 11, 'LEA_AUTOID': 2000}) lstIn.append({'COM_AUTOID': 1, 'PRG_AUTOID': 11, 'LEA_AUTOID': 2001}) lstIn.append({'COM_AUTOID': 1, 'PRG_AUTOID': 11, 'LEA_AUTOID': 2003}) lstIn.append({'COM_AUTOID': 1, 'PRG_AUTOID': 12, 'LEA_AUTOID': 3000}) lstIn.append({'COM_AUTOID': 1, 'PRG_AUTOID': 12, 'LEA_AUTOID': 3001}) lstIn.append({'COM_AUTOID': 1, 'PRG_AUTOID': 12, 'LEA_AUTOID': 3002}) lstIn.append({'COM_AUTOID': 1, 'PRG_AUTOID': 12, 'LEA_AUTOID': 3003}) lstIn.append({'COM_AUTOID': 2, 'PRG_AUTOID': 110, 'LEA_AUTOID': 4000}) c="COM_AUTOID" p="PRG_AUTOID" l="LEA_AUTOID" lastc=None lastp=None sampleOut=[] for entry in lstIn: C=entry[c] P=entry[p] L=entry[l] if C != lastc or P != lastp: sampleOut.append([C,[P,L]]) else: sampleOut[-1:][0][1].append(L) lastc=C lastp=P print "sampleOut=", sampleOut -- http://mail.python.org/mailman/listinfo/python-list