我想根据ip地址对结果数组进行排序

时间:2018-03-28 06:55:22

标签: python-3.x

如何根据ip

对结果数组进行排序

当我打印结果时,我得到了这个:

[{'abc.example.com': {'hostname': 'abc.example.com', 'ip': '11.123.30.116', 'country': 'Netherlands', 'cname': ''}},      
 {'accountstat.example.com': {'hostname': 'accountstat.example.com', 'ip': '11.123.30.133', 'country': 'Netherlands', 'cname': ''}}, 
 {'ae.example.com': {'hostname': 'ae.example.com', 'ip': '11.123.24.22', 'country': 'Netherlands', 'cname': 'site.example.com'}}]

1 个答案:

答案 0 :(得分:0)

如果您希望按值排序,可以将它们转换为整数并进行比较。

def ip_to_int(ip):
  return  int.from_bytes(bytes([int(part) for part in ip.split('.')]), byteorder='big')

data = [{'abc.example.com': {'hostname': 'abc.example.com', 'ip': '11.123.30.116', 'country': 'Netherlands', 'cname': ''}},
        {'accountstat.example.com': {'hostname': 'accountstat.example.com', 'ip': '11.123.30.133', 'country': 'Netherlands', 'cname': ''}}, 
        {'ae.example.com': {'hostname': 'ae.example.com', 'ip': '11.123.24.22', 'country': 'Netherlands', 'cname': 'site.example.com'}}]

sorted(data, key=lambda x: ip_to_int(list(x.values())[0]['ip']))

请注意,此解决方案仅适用于IPv4,data列表中每个项目只有一个IP。如果您还需要IPv6支持,则必须首先确定如何对IPv4与IPv6进行排序,然后相应地更新ip_to_int功能。