python中按IP地址和字符串顺序降序排列列表
我有一个字符串列表,如下所示:python中按IP地址和字符串顺序降序排列列表,python,sorting,Python,Sorting,我有一个字符串列表,如下所示: ip route vrf t141 0.0.0.0/0 10.76.102.101 name edge ip route vrf t141 10.0.0.0/8 10.76.101.101 ip route vrf t141 172.16.0.0/12 10.76.101.101 ip route vrf t141 192.168.0.0/16 10.76.101.101 ip route vrf t141 29.0.0.0/8 10.76.101.101 ip
ip route vrf t141 0.0.0.0/0 10.76.102.101 name edge
ip route vrf t141 10.0.0.0/8 10.76.101.101
ip route vrf t141 172.16.0.0/12 10.76.101.101
ip route vrf t141 192.168.0.0/16 10.76.101.101
ip route vrf t141 29.0.0.0/8 10.76.101.101
ip route vrf t20 0.0.0.0/0 10.76.102.27
ip route vrf t20 10.0.0.0/8 10.76.101.27
ip route vrf t20 172.16.0.0/12 10.76.101.27
ip route vrf t20 192.168.0.0/16 10.76.101.27
ip route vrf t20 29.0.0.0/8 10.76.101.27
我需要按vrf名称(t141,t20)的降序以及IP地址的降序对列表进行排序<代码>排序和排序
在基于vrf名称对字符串进行排序时工作正常,但在IP地址上工作不正常:行IP路由vrf t141 29.0.0.0/8 10.76.101.101
应位于IP路由vrf t141 10.0.0.0/8 10.76.101.101
之后,以及IP路由vrf t20 29.0.0.0/8 10.76.101.27
之后位于ip路由vrf t20 10.0.0.0/8 10.76.101.27之后,不在底部
这里是更好阅读的区别
ip route vrf t10 0.0.0.0/0 10.76.102.25
ip route vrf t10 10.0.0.0/8 10.76.101.25
+ip route vrf t10 29.0.0.0/8 10.76.101.25
ip route vrf t10 172.16.0.0/12 10.76.101.25
ip route vrf t10 192.168.0.0/16 10.76.101.25
-ip route vrf t10 29.0.0.0/8 10.76.101.25
ip route vrf t141 0.0.0.0/0 10.76.102.101 name edge
ip route vrf t141 10.0.0.0/8 10.76.101.101
+ip route vrf t141 29.0.0.0/8 10.76.101.101
ip route vrf t141 172.16.0.0/12 10.76.101.101
ip route vrf t141 192.168.0.0/16 10.76.101.101
-ip route vrf t141 29.0.0.0/8 10.76.101.101
非常感谢您的任何建议您可以使用正则表达式在排序方法中实现此结果
import re
ls = ['ip route vrf t141 0.0.0.0/0 10.76.102.101 name edge',
'ip route vrf t141 10.0.0.0/8 10.76.101.101',
'ip route vrf t141 172.16.0.0/12 10.76.101.101',
'ip route vrf t141 192.168.0.0/16 10.76.101.101',
'ip route vrf t141 29.0.0.0/8 10.76.101.101',
'ip route vrf t20 0.0.0.0/0 10.76.102.27',
'ip route vrf t20 10.0.0.0/8 10.76.101.27',
'ip route vrf t20 172.16.0.0/12 10.76.101.27',
'ip route vrf t20 192.168.0.0/16 10.76.101.27',
'ip route vrf t20 29.0.0.0/8 10.76.101.27']
print(*sorted(ls, key=lambda x: (int(re.search(r"(?:vrf t)(\w*)", x).group(1)), " ".join([i for i in x.split(" ") if not re.sub("[0-9.\/]", "", i)]))), sep="\n")
输出
ip route vrf t20 0.0.0.0/0 10.76.102.27
ip route vrf t20 10.0.0.0/8 10.76.101.27
ip route vrf t20 172.16.0.0/12 10.76.101.27
ip route vrf t20 192.168.0.0/16 10.76.101.27
ip route vrf t20 29.0.0.0/8 10.76.101.27
ip route vrf t141 0.0.0.0/0 10.76.102.101 name edge
ip route vrf t141 10.0.0.0/8 10.76.101.101
ip route vrf t141 172.16.0.0/12 10.76.101.101
ip route vrf t141 192.168.0.0/16 10.76.101.101
ip route vrf t141 29.0.0.0/8 10.76.101.101
t20
应该在t141
之前还是之后排序?您想要什么并不清楚。您想按字母顺序排序(“t141”<“t20”和“172”<“29”)还是使用字符串中的数字(表示t141>t20和172>29)?