我有一个用创建的IPv4和IPv6网络列表ipaddress.ip_network()
,我想对其进行排序(先按家族,然后按值)。最好的方法是什么?显然,幼稚的排序是行不通的:
>>> from ipaddress import ip_network
>>> L = [ip_network(x) for x in ['ff00::/8', 'fd00::/8', '172.16.0.0/12', '10.0.0.0/8']]
>>> L.sort()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/ipaddress.py", line 652, in __lt__
self, other))
TypeError: 10.0.0.0/8 and fd00::/8 are not of the same version
只需使用一个允许首先按类型比较值的key
函数即可,例如:
>>> from ipaddress import ip_network, IPv6Network
>>> L = [ip_network(x) for x in ['ff00::/8', 'fd00::/8', '172.16.0.0/12', '10.0.0.0/8']]
>>> L.sort(key=lambda x: (isinstance(x, IPv6Network), x))
>>> L
[IPv4Network('10.0.0.0/8'), IPv4Network('172.16.0.0/12'), IPv6Network('fd00::/8'), IPv6Network('ff00::/8')]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句