python - 对 IPv4Network 和 IPv6Network 对象列表进行排序

标签 python python-3.x network-programming

我有一个用 ipaddress.ip_network() 创建的 IPv4 和 IPv6 网络列表,我想排序(首先按家庭,然后按值(value))。最好的方法是什么?显然,天真的排序不起作用:

>>> 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 function这将允许首先按类型比较值,例如:

>>> 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')]

关于python - 对 IPv4Network 和 IPv6Network 对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37485530/

相关文章:

python - 创建pypy进程

python - 如何从列表创建分组条形图

python - 确定表达式中是否按下了键 (Python) (PyQT)

python-3.x - 如何在 Ray Tune 中定义与搜索算法无关的高维搜索空间?

c - 不同ip的服务器

c++ - 如何通过 boost asio 制作真正的异步客户端

python - 如何对数据库中的登录进行建模?

python - 这是将 8 个 8 位整数数组转换为 1 个 64 位整数的安全方法吗

python - Python 3 中的 For 循环

java - 获取网络终端操作系统版本(JAVA)