我正在编写一个脚本,可以帮助我记录我们的网络房间。
该脚本背后的想法是房间是一个列表,其中包含多个机架列表。机架列表包含名为module的列表,其中包含服务器/交换机/等。在模块列表中是带有电缆号码的实际端口。
例如:
[04/02, [MM02, [1, #1992, 2, #1993, 3, #1567 ....], MM03, [1, #1234 .....]], 04/03, [MM01, .........]]]
04/02
= First Rack
MM02
=该机架中的第一个模块
1
=端口号
#1992
=电缆号码
我希望你明白这一点。
我写的脚本比较房间列表中的电缆号码,看看是否有重复。现在它变得棘手:它应该用另一个端口的机架和模块替换电缆号码。这应该很简单,因为模块和机架是包含端口的那些列表的第一个元素,但我不知道如何访问信息。 (我是编程中的菜鸟)
答案 0 :(得分:1)
如上所述,这里使用的更好的数据结构是嵌套dict
s:
data = {
"04/02": {
"MM02": {1: "#1992", 2: "#1993", 3: "#1567", ...},
"MM03": {1: "#1234", ...},
...
},
"04/03": {
"MM01": ...
...
},
...
}
然后你只需要data["04/02"]["MM02"] = {1: "#1992", 2: "#1993", 3: "#1567", ...}
替换值,但是,这有一个缺点,即你需要手动创建子词典 - 但是,solutions to this problem例如:
from functools import partial
from collections import defaultdict
tripledict = partial(defaultdict, partial(defaultdict, dict))
mydict = tripledict()
mydict['foo']['bar']['foobar'] = 25
这些不仅具有可读性和可用性方面的优势,而且还具有访问速度。
答案 1 :(得分:0)
这是您正在寻找的Python类。它非常简单,所以如果你是菜鸟你说你是,你想学习:阅读并理解代码。
底部给出一些示例行来显示功能。对于多个机架,只需创建Rack()列表即可。祝你好运。
class Rack():
def __init__(self, name):
self.name = name
self.modules = dict()
# port_cable_list should be in the form:
# [(1, #1992), (2, #1993), (3, #1567)]
def add_module(self, name, port_cable_list):
self.modules[name] = dict()
for port, cable in port_cable_list:
self.modules[name][port] = cable
def remove_module(self, name):
if name in self.modules:
del self.modules[name]
def add_port(self, module_name, port, cable):
if module_name not in self.modules:
self.modules[module_name][port] = cable
return True
return False
def remove_port(self, module_name, port):
if module_name in self.modules:
if port in self.modules[module_name]:
del self.modules[module_name][port]
return True
else:
return False
return False
def module_exists(self, module_name):
return module_name in self.modules
def port_exists_in_module(self, module_name, port):
if self.modules[module_name]:
return port in self.modules[module_name]
return False
def print_module(self, module_name):
if self.module_exists(module_name):
print "%s\nPort\tCable" % (module_name)
for port, cable in self.modules[module_name].items():
print port, "\t", cable
print
return True
return False
def print_rack(self):
print self.name + ':'
for module_name in self.modules.keys():
self.print_module(module_name)
SomeRack = Rack('04/02')
SomeRack.add_module("MM02", [(1, '#1992'), (2, '#1993'), (3, '#1567')])
SomeRack.add_module("MM03", [(1, '#1234')])
SomeRack.print_module("MM03")
SomeRack.print_rack()
SomeRack.remove_module("MM03")
print SomeRack.module_exists("MM03")
SomeRack.print_rack()