簡體   English   中英

對 python 中的元組列表進行排序

[英]Sort the list of tuples in python

我有這樣的元組

[('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')]

這些是硬幣及其到期日。 日期是字符串格式,所以排列錯誤。

所以我已經將格式更改為日期並嘗試安排。 我試過下面的代碼。

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))

並且結果與預期的一樣。

[['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)]]

現在,當我想回到我在字符串中提到的舊格式時,它的順序不同。 它進入未分類的方式。 最后需要幫助以字符串格式排序。

這將滿足您的要求,但正如我所說,您最好以正確的格式生成這些日期元組。

product_list = [('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')]

product_list.sort( key=lambda k: (k[0],k[1][4:6]+k[1][2:4]+k[1][0:2]))
print(product_list)

使用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')]

當您想要創建 new_list 並想要備份現有列表時

注意: sorted():-> 創建一個新列表



從@manlai 借來的代碼 A:謝謝你分享你的答案

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

當您要修改現有列表時

注意: given_list_obj.sort(key=function):-> 對現有列表進行排序


new_list1 = lst.copy()
new_list1.sort(key=lambda x:(x[0], datetime.strptime(x[1], '%d%m%y')))
print(new_list)

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')]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM