python ip地址排序

方法一:

ip_list = ['192.168.1.100', '192.168.10.3', '192.168.8.1']
ip_list.sort(lambda x,y: cmp(''.join( [ i.rjust(3, '0') for i in x.split('.')] ), ''.join( [ i.rjust(3, '0') for i in y.split('.')] ) ) )

结果

['192.168.1.100', '192.168.8.1', '192.168.10.3']

方法二:

转换成 int 型,用 int 来比较

import struct
import socket

def ip2int(addr):
    return struct.unpack("!I", socket.inet_aton(addr))[0]

def int2ip(addr):
    return socket.inet_ntoa(struct.pack("!I", addr))

ip_list = ['192.168.1.100', '192.168.10.3', '192.168.8.1']
# 构建 int_ip:ip 形式的 key:value, 并对 key 排序

ip_unsorted_dict = {}
for ip in ip_list:
    int_ip = ip2int(ip)
    ip_unsorted_dict[int_ip] = ip

keys = ip_unsorted_dict.keys()
keys.sort()
ip_sorted_list=[]
for key in keys:
    ip_sorted_list.append(ip_unsorted_dict[key])

print ip_sorted_list

结果:

['192.168.1.100', '192.168.8.1', '192.168.10.3']

参考:
http://blog.csdn.net/hong201/article/details/3119519

发表评论

电子邮件地址不会被公开。 必填项已用*标注