我有以下内容:
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']
如果您的“行”不是以逗号 + 空格分隔的那么整齐,您可能还需要去掉空格。
