![](/img/trans.png)
[英]How can I enhance this python code to do a natural sort of a list of FQN hostnames and ip addresses?
[英]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.