使用Python根据另一个列表中的值组合列表中的项

使用Python根据另一个列表中的值组合列表中的项,python,python-3.x,Python,Python 3.x,我正在学习Python编程,我编写了一个Python脚本,从XML中提取所有标记和值,并将其转换为excel。我遇到的问题是,我需要特定格式的标签。我在两个单独的列表中有以下标记和值 如果该值不在一行中,那么该标记应在到达具有值的标记之前追加到下一个标记。 所以如果输入是 Tags Values OAuth UserAuth Vendor ABC Time 21.04 AppName Request

我正在学习Python编程,我编写了一个Python脚本,从XML中提取所有标记和值,并将其转换为excel。我遇到的问题是,我需要特定格式的标签。我在两个单独的列表中有以下标记和值

如果该值不在一行中,那么该标记应在到达具有值的标记之前追加到下一个标记。 所以如果输入是

Tags            Values
OAuth             
UserAuth 
Vendor          ABC
Time            21.04
AppName
Request         Temporary
所需的输出如下

Tags                           Values
OAuth             
OAuth.UserAuth 
OAuth.UserAuth.Vendor          ABC
OAuth.UserAuth.Time            21.04
AppName
AppName.Request                Temporary
因为这没有固定的可重复的更改,所以我完全不确定如何继续使用Python进行更改。我知道这可以通过列表理解来实现,但不确定如何实现

tags = ['OAuth', 'UserAuth', 'Vendor', 'Time', 'AppName', 'Request']
values = ['', '', 'ABC', '21.04', '', 'Temporary']

def parse_tree(tags, values):
    value_found = False
    path = []
    for tag, value in zip(tags, values):
        if value:
            value_found = True
            yield ((".".join(path + [tag])), value)
        else:
            if value_found:
                # new branch from root
                path = []
                value_found = False
            path.append(tag)

list(parse_tree(tags, values))
给予


为什么它会切换到
OAuth.UserAuth.Time
而不仅仅是
Time
?我们如何知道
Time
属于
UserAuth
而不是新根?从原始XML而不是这个模糊不清的版本来看,这可能会更容易。@HughBothwell显然,逻辑是任何没有值的东西都不是叶子。
[
    ('OAuth.UserAuth.Vendor', 'ABC'),
    ('OAuth.UserAuth.Time', '21.04'),
    ('Request', 'Temporary')
]