我有一个与此类似的元组列表(这里简化了,其中有超过14000个元组的路径比目标部分)在
[ (Obj1.part1, {<SPEC>}), (Obj1.partN, {<SPEC>}), (ObjK.partN, {<SPEC>}) ]
其中Obj从1到1000,部分从0到2000。这些“键”都有一个与它们相关联的规范字典,作为检查另一个二进制文件的查找引用。specs dict包含诸如位偏移量、位大小和路径所指向的数据的C类型等信息对象. 在
例如:Obj4.part500可能有这样的规范{'size':32,'offset':128,'type':'int'}这让我知道要访问二进制文件中的Obj4.part500,我必须从偏移量128中解压32位。在
所以,现在我想用我的字符串列表创建一个嵌套字典,在简化的情况下,它看起来像这样
data = { 'Obj1' : {'part1':{spec}, 'partN':{spec} },
'ObjK' : {'part1':{spec}, 'partN':{spec} }
}
为了做到这一点,我目前正在做两件事,1。我正在使用一个dotdict类,以便能够对dictionary get/set使用点表示法。那堂课是这样的:
^{pr2}$创建嵌套的“dotdict”的方法如下所示:
def addPath(self, spec, parts, base):
if len(parts) > 1:
item = base.setdefault(parts[0], dotdict())
self.addPath(spec, parts[1:], item)
else:
item = base.setdefault(parts[0], spec)
return base
然后我就做一些类似的事情:
for path, spec in paths:
self.lookup = dotdict()
self.addPath(spec, path.split("."), self.lookup)
所以,最后self.lookup.Obj4.part500
指向规范
有没有更好的(更像Python)的方法?在
除非你喜欢用点表示法访问规范,否则试着直接把它们放到字典中。在下面的代码中,名称
d
跟踪路径上访问的最里面的字典:如果每个路径只有两个部分(
^{pr2}$ObjN
和partN
),那么可以这样做:相关问题 更多 >
编程相关推荐