[英]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):
我填寫了兩個字典。 parents
和descendants
其中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.