I have written a program which must sort the following:
unsorted_list=[['le', 5], ['aab', 4], ['aaa', 5]]
to:
[['aaa', 5], ['le', 5], ['aab', 4]]
It should be sorted by number. If the numbers are the same then it should sort alphabetical. I have the following code:
def sortItem(lista):
''' func for sort by item'''
return lista[1]
sorted(unsorted_list, key=sortItem, reverse=True)
Unfortunately, it does not return string alphabetical. Any suggestion how to do it?
Since x[1]
is an integer, you can sort it from maximum to minimum simply by negating it:
sorted(unsorted_list, key=lambda x: (-x[1], x[0]))
The tuples created in key
will be sorted according to the first element (-x[1]
), then by second element (x[0]
). This corresponds exactly to your logic:
"So, it means than it is sorted by number but if numbers are the same the sort will be alphabetical."
In [2]: l = [['le', 5], ['aab', 4], ['aaa', 5]]
In [3]: sorted(l, key=lambda (x,y):(-y,x))
Out[3]: [['aaa', 5], ['le', 5], ['aab', 4]]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With