对 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')))
输出:
[('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)
输出
[('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')]
我有这样的元组
[('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')))
输出:
[('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)
输出
[('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')]