繁体   English   中英

从Word XML嵌套字典

[英]Nesting Dictionary from Word XML

我有一个带有表格的Word文件。 目的是浏览XML(使用lxml )并生成{formTag:formValue}的字典。 由于表单可以嵌套在其他重复的表单中,而这些重复表单最初会生成

{topLevelFormTag:formTag1+formValue1+formTag2+formValue2,  formTag1:formValue1, formTag2:formValue2}

但是,最终目标是

{topLevelFormTag:{formTag1:formValue1, formTag2:formValue2}}

当我搜索文件时( for field in xmlroot.iter(TAG_FIELD):我填写了两个字典。 parentsdescendants其中parents[field] = field.getparents( )和descendants[field] = list(field.iterdescendants()) 下面是我将所有字段的字典折叠为嵌套字典的方法。 如果只有一个嵌套级别,则可以正常工作,但是,如果添加其他级别,则失败。 它失败是因为嵌套形式位于上述所有级别的后代中,因此可以将其作为任何更高级别的子级放置。

for ptag in parents:
    for dtag in descendants:
        if parents[ptag] in descendants[dtag]:
            print "{} is a descendant of {}".format(ptag, dtag)
            try:
                fields[dtag][ptag] = fields[ptag]
                del fields[ptag]
            except TypeError:
                fields[dtag] = {ptag: fields[ptag]}
                del fields[ptag]
            except KeyError:
                print "!!!{}:{}!!!".format(ptag, dtag)

如何确定将字段放置在最底层,以便正确嵌套字典?

要查找任何词典中的最后一个嵌套,您必须使用递归关系:

def last_nest(somedict):
    for i in somedict:
        if type(somedict[i]) is dict:
            return last_nest(somedict[i])
    return somedict

test = {"a":{"b":{"c":123}}}
print last_nest(test)

因此,您需要考虑的主要问题是如何终止递归关系,以便最终获得所需的命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM