Skip to main content
 首页 » 编程设计

Python 线排序 -

2025年05月04日16findumars

我有以下内容:

line  = ['aaaa, 1111, BOB, 7777','aaaa, 1111, BOB, 8888','aaaa, 1111, larry, 7777',,'aaaa, 1111, Steve, 8888','BBBB, 2222, BOB, 7777'] 

有什么办法可以先按 (Bob,Larry,Steve) 排序,然后按 (1111,2222) 排序?

所以...

for i in line: 
    i = i.split(' ') 
    pos1 = i[0] 
    pos2 = i[1] 
    pos3 = i[2] 
    pos4 = i[3] 

所以我需要先按 pos3 排序,然后再按 pos2 排序。

期望的输出是:

'aaaa, 1111, BOB, 7777' 
'aaaa, 1111, BOB, 8888' 
'BBBB, 2222, BOB, 7777' 
'aaaa, 1111, larry, 7777' 
'aaaa, 1111, Steve, 8888' 

请您参考如下方法:

将拆分留给关键函数:

sorted(line, key=lambda l: l.lower().split(', ')[2:0:-1]) 

这将按字典顺序返回 line 中的字符串,不区分大小写。 [2:0:-1] 切片以相反的顺序返回第三列和第二列。

演示:

>>> line  = ['aaaa, 1111, BOB, 7777','aaaa, 1111, BOB, 8888','aaaa, 1111, larry, 7777','aaaa, 1111, Steve, 8888','BBBB, 2222, BOB, 7777'] 
>>> from pprint import pprint 
>>> pprint(sorted(line, key=lambda l: l.lower().split(', ')[2:0:-1])) 
['aaaa, 1111, BOB, 7777', 
 'aaaa, 1111, BOB, 8888', 
 'BBBB, 2222, BOB, 7777', 
 'aaaa, 1111, larry, 7777', 
 'aaaa, 1111, Steve, 8888'] 

如果您的“行”不是以逗号 + 空格分隔的那么整齐,您可能还需要去掉空格。