首页 > 解决方案 > 在 Python 中有没有更好的方法来分配 lxml xpath() 的第一个结果?

问题描述

我正在转换一些将 XML 文档从 Perl 转换为 Python 的脚本。

在 Perl 中使用 XML::LibXML 我可以做

my ($target) = $dom->findnodes('/root/child1');

从返回的节点列表中分配第一个节点。

到目前为止,在 Python 中我得到了这个工作:

target = (tree.xpath('/root/child1'))[0]

但我想知道是否有更好或更类似于 Python 的方法来做到这一点。

标签: pythonlxml

解决方案


如果您确定在 下始终只有一个child1节点,则可以使用可迭代解包root将方法中返回列表的第一项直接分配给变量:xpath

target, = tree.xpath('/root/child1')

或者,如果您的输入中可能有多个child1节点root,您可以使用星号表达式将其余匹配节点解压缩到未使用的变量中,通常_按约定命名:

target, *_ = tree.xpath('/root/child1')

可迭代解包通常被认为比通过索引指定列表项更具 Pythonic,除非您需要直接在任意索引处指定项目。


推荐阅读