Python习语:列出项目限制的理解

ada*_*Lev 5 python idioms list-comprehension

我基本上试图这样做(伪代码,不是有效的python):

limit = 10
results = [xml_to_dict(artist) for artist in xml.findall('artist') while limit--]
Run Code Online (Sandbox Code Playgroud)

那么我怎样才能以简洁有效的方式对其进行编码呢?XML文件可以包含0到50位艺术家之间的任何内容,而且我无法控制一次获得的数量,而AFAIK,没有XPATH表达式可以说"让我达到10个节点".

谢谢!

ken*_*ytm 6

你在用lxml吗?您可以使用XPath来限制查询级别中的项目,例如

>>> from lxml import etree
>>> from io import StringIO
>>> xml = etree.parse(StringIO('<foo><bar>1</bar><bar>2</bar><bar>4</bar><bar>8</bar></foo>'))
>>> [bar.text for bar in xml.xpath('bar[position()<=3]')]
['1', '2', '4']
Run Code Online (Sandbox Code Playgroud)

您还可以使用itertools.islice限制任何可迭代的,例如

>>> from itertools import islice
>>> [bar.text for bar in islice(xml.iterfind('bar'), 3)]
['1', '2', '4']
>>> [bar.text for bar in islice(xml.iterfind('bar'), 5)]
['1', '2', '4', '8']
Run Code Online (Sandbox Code Playgroud)


jat*_*ism 5

假设这xml是一个ElementTree对象,该findall()方法返回一个列表,所以只需对该列表进行切片:

limit = 10
limited_artists = xml.findall('artist')[:limit]
results = [xml_to_dict(artist) for artist in limited_artists]
Run Code Online (Sandbox Code Playgroud)