Sorting (deeply) nested lists

M

mamboknave

I cannot resolve this on my own. Need help, please...

nestedTuples = [
[ (L0t0e0, L0t0e1, L0t0e2), (L0t1e0, 2, L0t1e2), (L0t2e0, L0t2e1, L0t2e2) ],
[ (L1t0e0, L1t0e1, L1t0e2), (L1t1e0, 0, L1t1e2), (L1t2e0, L1t2e1, L1t2e2) ],
[ (L2t0e0, L2t0e1, L2t0e2), (L2t1e0, 1, L2t1e2), (L2t2e0, L2t2e1, L2t2e2) ] ]

With LNtXeY I mean the element Y in the tuple X of the list N.

How can I sort nestedTuples by, say, the 2nd element in the 2nd tuple of each list?

The above should get sorted as :

nestedTuples = [
[ (L1t0e0, L1t0e1, L1t0e2), (L1t1e0, 0, L1t1e2), (L1t2e0, L1t2e1, L1t2e2) ],
[ (L2t0e0, L2t0e1, L2t0e2), (L2t1e0, 1, L2t1e2), (L2t2e0, L2t2e1, L2t2e2) ],
[ (L0t0e0, L0t0e1, L0t0e2), (L0t1e0, 2, L0t1e2), (L0t2e0, L0t2e1, L0t2e2) ] ]

Thanks so much!!
 
P

Peter Otten

I cannot resolve this on my own. Need help, please...

nestedTuples = [
[ (L0t0e0, L0t0e1, L0t0e2), (L0t1e0, 2, L0t1e2), (L0t2e0, L0t2e1, L0t2e2)
[ ], (L1t0e0, L1t0e1, L1t0e2), (L1t1e0, 0, L1t1e2), (L1t2e0, L1t2e1,
[ L1t2e2) ], (L2t0e0, L2t0e1, L2t0e2), (L2t1e0, 1, L2t1e2), (L2t2e0,
[ L2t2e1, L2t2e2) ] ]

With LNtXeY I mean the element Y in the tuple X of the list N.

How can I sort nestedTuples by, say, the 2nd element in the 2nd tuple of
each list?

def getkey(item):
return item[1][1]
namedTuples.sort(key=getkey)

You can also write this as

namedTuples.sort(key=lambda item: item[1][1])
The above should get sorted as :

nestedTuples = [
[ (L1t0e0, L1t0e1, L1t0e2), (L1t1e0, 0, L1t1e2), (L1t2e0, L1t2e1, L1t2e2)
[ ], (L2t0e0, L2t0e1, L2t0e2), (L2t1e0, 1, L2t1e2), (L2t2e0, L2t2e1,
[ L2t2e2) ], (L0t0e0, L0t0e1, L0t0e2), (L0t1e0, 2, L0t1e2), (L0t2e0,
[ L0t2e1, L0t2e2) ] ]
 
M

mamboknave

You can also write this as

namedTuples.sort(key=lambda item: item[1][1])

That's exactly what I did before and got "IndexError: list index out of range".

So, I thought my lambda was wrong and posted here.

Now, having seen you reply, I dug deeper and... of course I had IndexError: the list was horribly empty!

Thanks so much for replying so quickly, Peter!
 
M

mamboknave

You can also write this as

namedTuples.sort(key=lambda item: item[1][1])

That's exactly what I did before and got "IndexError: list index out of range".

So, I thought my lambda was wrong and posted here.

Now, having seen you reply, I dug deeper and... of course I had IndexError: the list was horribly empty!

Thanks so much for replying so quickly, Peter!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,009
Latest member
GidgetGamb

Latest Threads

Top