python - python中的复合排序

标签 python sorting

我有一个输出大量数据的 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)

关于python - python中的复合排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1054454/

相关文章:

python - unity_facebook_daemon.py 是什么? (Ubuntu 13)

python - 在列表中查找与其他元素不同的元素的最pythonic方法是什么?

c - 需要帮助将数组结构更改为结构数组

php - 如何根据键可用性将所有输入值分配到数组中而不会发生冲突?

c++ - C++设置唯一性和顺序

python - 获取列表中相似连续元素的索引(Python3)

python - 寻路算法无法正常工作

python - 分层注意力网络 - model.fit 生成错误 'ValueError: Input dimension mis-match'

r - 防止因子水平排序

r - 在 ggplot2 中的 x 轴上绘制有序因子