Skip to content
Advertisement

Sort the list of tuples in python

I have tuples like this

[('AVAX', '070122'), ('AVAX', '201221'), ('AVAX', '211221'), ('AVAX', '241221'), ('AVAX', '311221'), ('BNB', '070122'), ('BNB', '201221'), ('BNB', '211221'), ('BNB', '241221'), ('BNB', '280122'), ('BNB', '311221'), ('BTC', '070122'), ('BTC', '201221'), ('BTC', '211221'), ('BTC', '241221'), ('BTC', '250222'), ('BTC', '250322'), ('BTC', '280122'), ('BTC', '311221'), ('ETH', '070122'), ('ETH', '201221'), ('ETH', '211221'), ('ETH', '241221'), ('ETH', '250222'), ('ETH', '250322'), ('ETH', '280122'), ('ETH', '311221'), ('MATIC', '070122'), ('MATIC', '201221'), ('MATIC', '211221'), ('MATIC', '241221'), ('MATIC', '311221'), ('SOL', '070122'), ('SOL', '201221'), ('SOL', '211221'), ('SOL', '241221'), ('SOL', '280122'), ('SOL', '311221')]

these are the coins and its expiries. The date is in string format, so the arrangement is wrong.

so i have changed the format to date and tried to arrange. I have tried the below code.

filtered_final_product_list = [list(ele) for ele in filtered_final_product_list]
new_list=list()
for i in filtered_final_product_list:
    i[1]=datetime.strptime(i[1],'%d%m%y')
    new_list.append(i)
    
print(sorted(new_list))

and the result is as expected as sorted.

[['AVAX', datetime.datetime(2021, 12, 20, 0, 0)], ['AVAX', datetime.datetime(2021, 12, 21, 0, 0)], ['AVAX', datetime.datetime(2021, 12, 24, 0, 0)], ['AVAX', datetime.datetime(2021, 12, 31, 0, 0)], ['AVAX', datetime.datetime(2022, 1, 7, 0, 0)], ['BNB', datetime.datetime(2021, 12, 20, 0, 0)], ['BNB', datetime.datetime(2021, 12, 21, 0, 0)], ['BNB', datetime.datetime(2021, 12, 24, 0, 0)], ['BNB', datetime.datetime(2021, 12, 31, 0, 0)], ['BNB', datetime.datetime(2022, 1, 7, 0, 0)], ['BNB', datetime.datetime(2022, 1, 28, 0, 0)], ['BTC', datetime.datetime(2021, 12, 20, 0, 0)], ['BTC', datetime.datetime(2021, 12, 21, 0, 0)], ['BTC', datetime.datetime(2021, 12, 24, 0, 0)], ['BTC', datetime.datetime(2021, 12, 31, 0, 0)], ['BTC', datetime.datetime(2022, 1, 7, 0, 0)], ['BTC', datetime.datetime(2022, 1, 28, 0, 0)], ['BTC', datetime.datetime(2022, 2, 25, 0, 0)], ['BTC', datetime.datetime(2022, 3, 25, 0, 0)], ['ETH', datetime.datetime(2021, 12, 20, 0, 0)], ['ETH', datetime.datetime(2021, 12, 21, 0, 0)], ['ETH', datetime.datetime(2021, 12, 24, 0, 0)], ['ETH', datetime.datetime(2021, 12, 31, 0, 0)], ['ETH', datetime.datetime(2022, 1, 7, 0, 0)], ['ETH', datetime.datetime(2022, 1, 28, 0, 0)], ['ETH', datetime.datetime(2022, 2, 25, 0, 0)], ['ETH', datetime.datetime(2022, 3, 25, 0, 0)], ['MATIC', datetime.datetime(2021, 12, 20, 0, 0)], ['MATIC', datetime.datetime(2021, 12, 21, 0, 0)], ['MATIC', datetime.datetime(2021, 12, 24, 0, 0)], ['MATIC', datetime.datetime(2021, 12, 31, 0, 0)], ['MATIC', datetime.datetime(2022, 1, 7, 0, 0)], ['SOL', datetime.datetime(2021, 12, 20, 0, 0)], ['SOL', datetime.datetime(2021, 12, 21, 0, 0)], ['SOL', datetime.datetime(2021, 12, 24, 0, 0)], ['SOL', datetime.datetime(2021, 12, 31, 0, 0)], ['SOL', datetime.datetime(2022, 1, 7, 0, 0)], ['SOL', datetime.datetime(2022, 1, 28, 0, 0)]]

now when i want back in older format which i mentioned in string, its not in the same order. It goes into unsorted way. Need help in making in sorted way in string format at the end.

Advertisement

Answer

Sort by the coin and the date using datetime.datetime:

from datetime import datetime
sorted(lst, key=lambda x:(x[0], datetime.strptime(x[1], '%d%m%y')))

Output:

[('AVAX', '201221'), ('AVAX', '211221'), ('AVAX', '241221'), 
 ('AVAX', '311221'), ('AVAX', '070122'), ('BNB', '201221'), 
 ('BNB', '211221'), ('BNB', '241221'), ('BNB', '311221'), 
 ('BNB', '070122'), ('BNB', '280122'), ('BTC', '201221'),
 ('BTC', '211221'), ('BTC', '241221'), ('BTC', '311221'), 
 ('BTC', '070122'), ('BTC', '280122'), ('BTC', '250222'), 
 ('BTC', '250322'), ('ETH', '201221'), ('ETH', '211221'), 
 ('ETH', '241221'), ('ETH', '311221'), ('ETH', '070122'), 
 ('ETH', '280122'), ('ETH', '250222'), ('ETH', '250322'), 
 ('MATIC', '201221'), ('MATIC', '211221'), ('MATIC', '241221'), 
 ('MATIC', '311221'), ('MATIC', '070122'), ('SOL', '201221'),
 ('SOL', '211221'), ('SOL', '241221'), ('SOL', '311221'), 
 ('SOL', '070122'), ('SOL', '280122')]
User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement