我想通過 python3 中每個范圍(例如 range1、range2)中的鍵“vnet”對這些 JSON 物件進行排序。
我已經能夠像這樣對其進行排序:
source["range1"].sort(key=lambda x: x["vnet"])
但不幸的是,它不使用任何 IP 地址邏輯并按字符排序。
未排序的示例:
{
"range1": [
{
"name": "vnet1",
"vnet": "192.168.11.0/25",
"subnet": []
},
{
"name": "vnet2",
"vnet": "192.168.2.0/24",
"subnet": []
}
],
"range2": [
{
"name": "vnet3",
"vnet": "10.168.11.0/25",
"subnet": []
},
{
"name": "vnet4",
"vnet": "10.168.2.0/25",
"subnet": []
},
{
"name": "vnet5",
"vnet": "10.168.220.0/25",
"subnet": []
}
]
}
排序后應如下所示:
{
"range1": [
{
"name": "vnet2",
"vnet": "192.168.2.0/24",
"subnet": []
},
{
"name": "vnet1",
"vnet": "192.168.11.0/25",
"subnet": []
}
],
"range2": [
{
"name": "vnet4",
"vnet": "10.168.2.0/25",
"subnet": []
},
{
"name": "vnet3",
"vnet": "10.168.11.0/25",
"subnet": []
},
{
"name": "vnet5",
"vnet": "10.168.220.0/25",
"subnet": []
}
]
}
我非常感謝任何幫助,因為我現在被困在這里。
uj5u.com熱心網友回復:
假設您將 dict 存盤在json_dict.
您可以將socket.inet_aton(__ip_string: str)其用作排序功能的鍵。它將 ip 字串轉換為 32 位打包二進制檔案。
所以下面的代碼會做你想要的
import socket
json_dict = {
"range1": [
{
"name": "vnet1",
"vnet": "192.168.11.0/25",
"subnet": []
},
{
"name": "vnet2",
"vnet": "192.168.2.0/24",
"subnet": []
}
],
"range2": [
{
"name": "vnet3",
"vnet": "10.168.11.0/25",
"subnet": []
},
{
"name": "vnet4",
"vnet": "10.168.2.0/25",
"subnet": []
},
{
"name": "vnet5",
"vnet": "10.168.220.0/25",
"subnet": []
}
]
}
for key, value in json_dict.items():
value.sort(key=lambda x: socket.inet_aton(x['vnet'].split("/")[0]))
print(json_dict)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/437131.html
下一篇:嘗試快速排序結構陣列時遇到問題
