我有一段代码看起来像这样:
ipCount = defaultdict(int)
for logLine in logLines:
date, serverIp, clientIp = logLine.split(" ")
ipCount[clientIp] += 1
for clientIp, hitCount in sorted(ipCount.items(), key=operator.itemgetter(0)):
print(clientIp)
它对 IP 进行排序,但像这样:
192.168.102.105
192.168.204.111
192.168.99.11
这还不够好,因为它无法识别 99 是小于 102 或 204 的数字。我希望输出如下所示:
192.168.99.11
192.168.102.105
192.168.204.111
我找到 了这个,但我不确定如何在我的代码中实现它,或者因为我使用字典,它是否有可能实现。我在这里有什么选择?
原文由 tkit 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用自定义
key
函数返回字符串的可排序表示形式:split_ip()
函数采用 IP 地址字符串,如'192.168.102.105'
并将其转换为整数元组(192, 168, 102, 105)
。 Python 内置支持按字典顺序对元组进行排序。更新:实际上,使用
socket
模块中的inet_aton()
函数可以更轻松地完成此操作: