[英]How can I enhance this python code to do a natural sort of a list of FQN hostnames and ip addresses?
说我有
apple.berry.cherry.za
100.100.100.100
100.100.100.20
apple.berry.banna.au
而且我要
100.100.100.20
100.100.100.100
apple.berry.cherry.au
apple.berry.banna.za
我有以下 python 代码,它按照我想要的方式对 FQN 主机名进行排序,但它只对 IP 地址进行字母数字排序:
#!/bin/python
from fileinput import input
for y in sorted([x.strip().split('.')[::-1] for x in input()]): print '.'.join(y[::-1])
我可以添加一个函数将三元组转换为整数:
def atoi(text):
return int(text) if text.isdigit() else text
但是因为我不知道python,所以我不知道如何在排序之前对列表的每个元素调用atoi()。 怎么做?
您可以使用map filter将函数应用于列表的每个元素。 所以它会是:
for y in sorted([map(atoi, x.strip().split('.')[::-1]) for x in input()]):
print '.'.join(y[::-1])
编辑:正如@Slam 所指出的那样,如果有一天您决定使用 Python 3,那么翻译上述代码将不会很简单。 它不允许您比较整数和字符串。
如果您只期望 ipv4 并且这是按时实用程序脚本,您可以尝试像
sorted(lst, key=lambda x: [i.zfill(3) if i.isdigit() else i for i in x.split('.')][::-1])
如果没有,您可能不会以单线结束。 您需要对数字进行自然排序,这不是开箱即用的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.