2016-05-27 11 views
0

私は、ファミリを最初に、次に値でソートしたい、ipaddress.ip_network()で作成されたIPv4とIPv6ネットワークのリストを持っています。これを行う最善の方法は何でしょうか?どうやら、素朴なソートは動作しません:IPv4ネットワークとIPv6ネットワークオブジェクトのリストの並べ替え

>>> 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 

答えて

1

だけで、最初のタイプによってのようなものの値を比較することができるようになる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')] 
関連する問題