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