Sorting list of tuples of tuples
<pre><code>[((D,A),0.0),((D,C),0.0),((D,E),0.5)]
</code></pre>

<p>I need to sort the list as:</p>

<pre><code>[((D,E),0.5),((D,A),0.0),((D,C),0.0)]
</code></pre>

<p>I have used the <code>sorted()</code> function and I am able to sort based on values <code>0.5, 0.0</code>... But I am not able to sort on the alphabetical order as I need the list to be sorted in descending order by the numbers and in ascending order of alphabets if the numbers have same value.</p>

<p>Use a tuple as the sort key with a negative on the float to reverse the order:</p>

<pre><code>&gt;&gt;&gt; li=[(('D','A'),0.0),(('D','C'),0.0),(('D','E'),0.5)]
&gt;&gt;&gt; sorted(li, key=lambda t: (-t[-1],t[0]))
[(('D', 'E'), 0.5), (('D', 'A'), 0.0), (('D', 'C'), 0.0)]
</code></pre>

<p>If you cannot do negation (say on a string or letter value or something non numeric) then you can take advantage of the fact that the Python sort function is stable and do the sort in two steps:</p>

<pre><code>&gt;&gt;&gt; li=[(('D','A'),'A'),(('D','C'),'A'),(('D','E'),'C')]
&gt;&gt;&gt; sorted(sorted(li), key=lambda t: t[-1], reverse=True)
[(('D', 'E'), 'C'), (('D', 'A'), 'A'), (('D', 'C'), 'A')]
</code></pre>

python python-3.x sorting