全体船员
我从我的两个开关中提取出以下两个字典列表。第一个来自我们的核心交换机,第二个来自接入“switch1”。为了更深入地了解这个网络,我想对照这两个字典列表。在
core_table = [
{'ip': '172.17.2.1', 'mac': 'b8:27:eb:a3:24:a0', 'host': 'laptop', 'if': 'switch1'},
{'ip': '172.17.6.3', 'mac': '0c:89:10:88:20:3f', 'host': 'desktop', 'if': 'switch3'},
{'ip': '172.17.7.2', 'mac': 'b8:27:eb:a3:24:a3', 'host': 'server', 'if': 'switch1'},
{'ip': '172.17.6.2', 'mac': '0c:89:10:88:20:3f', 'host': 'storage', 'if': 'switch2'}
]
switch1_table = [
{'mac': '00:01:02:71:44:59', 'if': 'ge-1/0/6.0'},
{'mac': '00:06:73:00:c9:7a', 'if': 'ge-3/0/2.0'},
{'mac': 'b8:27:eb:a3:24:a0', 'if': 'ge-5/0/27.0'},
{'mac': '00:09:0f:09:1d:06', 'if': 'ae0.0'},
{'mac': '00:0a:07:05:1f:a4', 'if': 'ge-2/0/15.0'},
{'mac': '00:0b:4f:5d:09:ae', 'if': 'ge-2/0/19.0'},
{'mac': '00:0b:4f:d3:7b:3f', 'if': 'ge-1/0/18.0'},
{'mac': '00:0c:29:49:64:12', 'if': 'ae0.0'},
{'mac': '00:0e:ec:e8:18:50', 'if': 'ae0.0'},
{'mac': 'b8:27:eb:a3:24:a3', 'if': 'ge-0/0/44.0'},
{'mac': '00:15:17:93:aa:01', 'if': 'ae0.0'}
]
我可以总结core_表中的所有mac地址:
^{pr2}$如果我打印m,我只看到列表中最后一本字典。在
同样,access_表中的所有接口:
for y in [n['if'] for n in ex_table]:
print y
print n
这篇文章:Python - accessing values nested within dictionaries似乎与我需要的很接近,但是这依赖于一个字典列表中条目之间的关系。事实并非如此。在
在匹配mac地址和switch1\u表时,我找不到一种方法来迭代核心表。如果core_表中的mac地址与swicth1_表中的mac地址匹配,我想打印core_表的对应行和access_表的“If”值。我希望实现的目标:
{'ip': '172.17.2.1', 'mac': 'b8:27:eb:a3:24:a0', 'host': 'laptop', 'if': 'switch1' 'port': 'ge-5/0/27.0'},
{'ip': '172.17.7.2', 'mac': 'b8:27:eb:a3:24:a3', 'host': 'server', 'if': 'switch1' 'port': 'ge-0/0/44.0'}
我想出了:(谢谢:Pythonic Way to Compare Values in Two Lists of Dictionaries)
match = [x['mac'] for x in core_table if 'switch1' in x['if']]
print [x for x in switch1_table if x['mac'] in match]
这让我很接近,但现在我找不到添加主机和ip数据的方法。在
欢迎提出任何建议。在
我将创建switch1_表的副本,作为将mac地址映射到字典的字典,然后使用该表来提取核心表的相关行。在
印刷品
^{pr2}$不应尝试从外部访问
m
。见this。在创建列表理解是为了简化事情并使代码更干净。如果在许多嵌套层中使用它们,则会妨碍它们的用途。 对于Python 2.7.x
输出
^{pr2}$相关问题 更多 >
编程相关推荐