【问题标题】:Nesting Dictionary from Word XML从 Word XML 嵌套字典
【发布时间】:2016-02-10 14:59:36
【问题描述】:

我有一个包含表格的 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):) 时,我填写了两个字典; parentsdescendantsparents[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)

如何确定要放置字段的最底层以使我的字典正确嵌套?

【问题讨论】:

    标签: python xml lxml


    【解决方案1】:

    要在任何字典中找到最后一个嵌套,您必须使用递归关系:

    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)
    

    所以你需要考虑的主要事情是如何终止递归关系以便在最后得到你想要的dict。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 2019-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      相关资源
      最近更新 更多