簡體   English   中英

如何對嵌套的IP地址列表進行排序?

[英]how do I sort a nested list of ip addresses?

我有一小部分IP地址,我想按數據包的大小(整數)對它們進行排序。 如何分類?

 mylist = [ ["176.20.100.200",176.30.100.255",230], ["176.20.100.100",176.30.100.50",24]  ["172.20.16.80",172.30.16.26",230]]

假設您的列表如下(固定的錯別字),則可以使用lambda排序:

mylist = [["176.20.100.200","176.30.100.255",230], ["176.20.100.100","176.30.100.50",24], ["172.20.16.80","172.30.16.26",230] ]
for i,j,k in sorted(mylist, key=lambda x:x[2]):
    print ("Source : {}, Destination : {}, totalpacket : {}".format(i,j,k))

輸出:

Source : 176.20.100.100, Destination : 176.30.100.50, totalpacket : 24
Source : 176.20.100.200, Destination : 176.30.100.255, totalpacket : 230
Source : 172.20.16.80, Destination : 172.30.16.26, totalpacket : 230

在我看來,您可以執行以下操作:

from operator import itemgetter
mylist = [ ["176.20.100.200","176.30.100.255",230], ["176.20.100.100","176.30.100.50",24] ,["172.20.16.80","172.30.16.26",230]]
dict = {}
for index,list in enumerate(sorted(mylist, key=itemgetter(2))):
    dict[index] = {'source': list[0], 'dest': list[1], 'packetsize': list[2]  }

print(dict)

輸出量

{0: {'source': '176.20.100.100', 'dest': '176.30.100.50', 'packetsize': 24}, 1: {'source': '176.20.100.200', 'dest': '176.30.100.255', 'packetsize': 230}, 2: {'source': '172.20.16.80', 'dest': '172.30.16.26', 'packetsize': 230}}}}

現在,您將所有數據都放在一個變量中。 像其他任何字典一樣訪問它。

注意

使用lambda也是可能的,但是lambda函數在這樣的小情況下會變慢。

我想建議命名元組。 您可以將它們視為常規元組,但是在打印它們時,您會看到每個值代表什么。

from collections import namedtuple
from operator import itemgetter

Traffic = namedtuple('Traffic', 'source destination packetsize')

mylist = [ 
        Traffic("176.20.100.200","176.30.100.255",2300),
        Traffic("176.20.100.100","176.30.100.50",24),
        Traffic("172.20.16.80","172.30.16.26",230)]

for pkt in sorted(mylist, key=itemgetter(2)):
    print(pkt)

# Traffic(source='176.20.100.100', destination='176.30.100.50', packetsize=24)
# Traffic(source='172.20.16.80', destination='172.30.16.26', packetsize=230)
# Traffic(source='176.20.100.200', destination='176.30.100.255', packetsize=2300)

您可以使用列表理解和鍵將其排序為一行

  >>> mylist = [ ["176.20.100.200","176.30.100.255",230], ["176.20.100.100","176.30.100.50",24]  ,["172.20.16.80","172.30.16.26",230]]
   >>> sorted(mylist, key=lambda i:i[2])
[['176.20.100.100', '176.30.100.50', 24], ['176.20.100.200', '176.30.100.255', 230], ['172.20.16.80', '172.30.16.26', 230]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM