我有一个元组列表,看起来与此类似(这里简化了,有14000多个元组的路径比Obj.part更复杂)
[ (Obj1.part1, {<SPEC>}), (Obj1.partN, {<SPEC>}), (ObjK.partN, {<SPEC>}) ]
其中Obj从1到1000,部分从0到2000。这些“键”都有一个与其相关联的规范字典,作为检查另一个二进制文件的查找参考。specs dict包含诸如位偏移量、位大小和由路径ObjK.partN指向的数据的C类型等信息。
所以,现在我想用我的字符串列表创建一个嵌套字典,在简化的情况下,它将如下所示
data = { 'Obj1' : {'part1':{spec}, 'partN':{spec} },
'ObjK' : {'part1':{spec}, 'partN':{spec} }
}
为了做到这一点,我目前正在做两件事,1.我使用dotdict类,以便能够使用dot表示法进行dictionary get/set。那门课看起来像这样:
class dotdict(dict):
def __getattr__(self, attr):
return self.get(attr, None)
__setattr__ = dict.__setitem__
__delattr__ = dict.__delitem__
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
有没有更好的方法来做这件事?