字典列表中的值显示为None
我有一个元组的列表:
x = [('router_1', '0/1', '0/4', 'router_2'),
('router_1', '0/2', '0/4', 'router_3'),
('router_4', '0/1', '0/5', 'router_5'),
('router_4', '0/2', '0/5', 'router_6')]
我的目标是把数据整理成下面的样子:
dict = {"details": [
{
"router_1": {
"connections": [
{
"side_a": {
"device": "router_1",
"interface": "0/47",
},
"side_b": {
"interface": "0/17",
"device": "router_2",
}
},
{
"side_a": {
"device": "router_1",
"interface": "0/48",
},
"side_b": {
"interface": "0/17",
"device": "router_3",
}
}
]
}
},
{
"router_4": {
"connections": [
{
"side_a": {
"device": "router_4",
"interface": "0/47",
},
"side_b": {
"interface": "0/17",
"device": "router_5",
}
},
{
"side_a": {
"device": "router_4",
"interface": "0/48",
},
"side_b": {
"interface": "0/17",
"device": "router_6",
}
}
]
}
}
]
}
请注意:
- 键名 router_1 是根据 "side_a" 下的设备名称创建的
- 键名 router_4 也是根据 "side_a" 下的设备名称创建的
我尝试了以下方法:
import collections
data_dict = collections.defaultdict(list)
result = {}
for item in x:
router_a, router_a_int, router_b_int, router_b = item
result[side_a] = data_dict["connections"].append({"side_a": {
"hostname": router_a,
"interface": router_a_int},
"side_b": {
"interface": router_b_int,
"hostname": router_b
}})
但是,字典的值显示为 "None"。看起来每次添加数据时,值都变成了 None,我以为使用 collections.defaultdict(list) 应该能解决这个问题。
请问你能帮忙吗?
谢谢
1 个回答
0
x = [('router_1', '0/1', '0/4', 'router_2'),
('router_1', '0/2', '0/4', 'router_3'),
('router_4', '0/1', '0/5', 'router_5'),
('router_4', '0/2', '0/5', 'router_6')]
from copy import deepcopy
mDict = dict()
mDict['details'] = list()
tmpDict = dict()
for a, aI, b, bI in x:
if a not in tmpDict and tmpDict: mDict['details'].append(deepcopy(tmpDict))
if a not in tmpDict:
tmpDict = dict()
tmpDict[a] = dict({'connections': list()})
tmpDict[a]['connections'].append(dict({
"side_a": {
"device": a,
"interface": aI,
},
"side_b": {
"interface": bI,
"device": b,
}
})
)
mDict['details'].append(deepcopy(tmpDict))
这段话的意思是,只有在x
里的连接总是排好序的情况下,这个方法才有效。