簡體   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