繁体   English   中英

我怎样才能增强这个 python 代码来做一个自然排序的 FQN 主机名和 IP 地址列表?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM