Skip to main content
 首页 » 编程设计

python之python中的复合排序

2025年05月04日11jirigala

我有一个输出大量数据的 python 脚本,示例如下。 4 个字段中的第一个始终由两个字母、一个数字、一个斜杠和一个或两个数字组成

Gi3/2 --.--.--.-- 0024.e89b.c10e Dell Inc.   
Gi5/4 --.--.--.-- 0030.c1cd.f038 HEWLETTPACKARD    
Gi4/3 --.--.--.-- 0020.ac00.6703 INTERFLEX DATENSYSTEME GMBH   
Gi3/7 --.--.--.-- 0009.4392.34f2 Cisco Systems   
Gi6/6 --.--.--.-- 001c.2333.bd5a Dell Inc   
Gi3/16 --.--.--.-- 0009.7c92.7af2 Cisco Systems   
Gi5/12 --.--.--.-- 0020.ac00.3fb0 INTERFLEX DATENSYSTEME GMBH   
Gi4/5 --.--.--.-- 0009.4392.6db2 Cisco Systems   
Gi4/6 --.--.--.-- 000b.cd39.c7c8 Hewlett Packard   
Gi6/4 --.--.--.-- 0021.70d7.8d33 Dell Inc   
Gi6/14 --.--.--.-- 0009.7c91.fa71 Cisco Systems   

在第一个字段上正确排序的最佳方法是什么,以便该示例显示为

Gi3/2   --.--.--.-- 0024.e89b.c10e  Dell Inc.   
Gi3/7   --.--.--.-- 0009.4392.34f2  Cisco Systems   
Gi3/16  --.--.--.-- 0009.7c92.7af2  Cisco Systems   
Gi4/3   --.--.--.-- 0020.ac00.6703  INTERFLEX DATENSYSTEME GMBH   
Gi4/5   --.--.--.-- 0009.4392.6db2  Cisco Systems   
Gi4/6   --.--.--.-- 000b.cd39.c7c8  Hewlett Packard   
Gi5/4   --.--.--.-- 0030.c1cd.f038  HEWLETT PACKARD   
Gi5/12  --.--.--.-- 0020.ac00.3fb0  INTERFLEX DATENSYSTEME GMBH   
Gi6/14  --.--.--.-- 0009.7c91.fa71  Cisco Systems   
Gi6/4   --.--.--.-- 0021.70d7.8d33  Dell Inc   
Gi6/6   --.--.--.-- 001c.2333.bd5a  Dell Inc   

我的努力一直很困惑,导致诸如 12 之类的数字排在 5 之前!

一如既往,非常感谢您的耐心等待。

请您参考如下方法:

def lineKey (line): 
    keyStr, rest = line.split(' ', 1) 
    a, b = keyStr.split('/', 1) 
    return (a, int(b)) 
 
sorted(lines, key=lineKey)