gpt4 book ai didi

python - 按相邻属性值对 lxml 元素进行分组列表

转载 作者:太空宇宙 更新时间:2023-11-03 17:36:42 25 4
gpt4 key购买 nike

我有一些 html 表格行,如下所示

<tr class="even"></tr>
<tr class="even"></tr>
<tr class="odd"></tr>
<tr class="odd"></tr>
<tr class="odd"></tr>
<tr class="even"></tr>

我使用 lxml 获取 tr 元素列表:

trs = lxml.html.fromstring(html_str).xpath('//tr')

我想将这些 tr 元素分组到一个列表列表中:

[
[<tr class="even">,<tr class="even">],
[<tr class="odd">,<tr class="odd">,<tr class="odd">],
[<tr class="even">]
]

即将具有相同类的相邻行分组在一起。到目前为止,我已经实现了以下循环结构:

grouped, grp, last = [], [], trs[0].get('class')
for tr in trs:
cl = tr.get('class')
if last != cl:
grouped.append(grp)
grp = []
grp.append(tr)
last = cl
grouped.append(grp)

有没有一种简单、优雅且Python式的方法来做到这一点?

最佳答案

也许使用 itertools.groupby 方法会更好一些。

因此,您可以使用以下方法获取包含元素的列表列表:

from itertools import groupby

groupped = groupby(trs, key=lambda tag: tag.attrib.get('class'))

groups = []
for key, group in groupped:
groups.append(list(group))

关于python - 按相邻属性值对 lxml 元素进行分组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31126397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com