Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中按IP地址和字符串顺序降序排列列表_Python_Sorting - Fatal编程技术网

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)?