I have a piece of code that looks like this:
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)
and it kind of sorts IP’s, but like this:
192.168.102.105
192.168.204.111
192.168.99.11
which is not good enough since it does not recognize that 99 is a smaller number than 102 or 204. I would like the output to be like this:
192.168.99.11
192.168.102.105
192.168.204.111
I found this, but I am not sure how to implement it in my code, or if it is even possible since I use dictionary. What are my options here?
You can use a custom
keyfunction to return a sortable representation of your strings:The
split_ip()function takes an IP address string like'192.168.102.105'and turns it into a tuple of integers(192, 168, 102, 105). Python has built-in support to sort tuples lexicographically.UPDATE: This can actually be done even easier using the
inet_aton()function in thesocketmodule: