python对list列表排序,按照列表内字符串的数字

形如这种有多个关键字的list

list = ['a222_1_0.797911.png', 'a222_2_0.845443.png', 'a222_3_0.753170.png', 
'a222_4_0.764250.png', 'a222_5_0.785842.png', 'a222_6_0.750649.png', 
'a222_7_0.751012.png', 'a222_8_0.761352.png', 'a222_9_0.762369.png', 
'a222_10_0.750486.png', 'a222_11_0.751703.png', 'a222_12_0.769575.png', 
'a222_13_0.749994.png', 'a222_14_0.750260.png', 'a222_15_0.756653.png', 
'a222_16_0.749484.png', 'a222_17_0.748359.png', 'a222_18_0.749407.png', 
'a222_19_0.751062.png', 'a222_20_0.748874.png', 'a222_21_0.749563.png', 
'a222_22_0.748304.png', 'a222_23_0.748355.png', 'a222_24_0.753072.png', 
'a222_25_0.750552.png', 'a222_26_0.748127.png', 'a222_27_0.747977.png', 
'a222_28_0.748136.png', 'a222_29_0.748381.png', 'a222_30_0.746901.png']
# lambda x:(第一个关键字,第二个关键字...)
# int把提取的数字转为整型,然后排序,结果就不是1,10,11,12,2,20,21这种了
list.sort(key = lambda x: (int(x.split('_')[0][1:]), int(x.split('_')[1]), int(x.split('_')[2])))

解释

用lamdba函数指定排序的依据,如果需要多个关键字作为依据进行排序,可以用形如 lamdba x : (key1, key2, …) 的方式指定。

在上面的代码中三个关键字是int(x.split(’’)[0][1:]),int(x.split(’’)[1]),int(x.split(’’)[3]),
以第一个关键字为例进行解释。
1.首先需要将标签根据"
“进行分割,即x.split(’’),
2.然后先按第一个数字进行排序,取分割后的第一部分x.split(’
’)[0],
3. 索引[1:] 去掉数字前的"a”,x.split(’_’)[0][1:]

参考
https://blog.csdn.net/keevinzha/article/details/104453032

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值