我有一些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)
有没有简单,优雅和pythonic的方法来做到这一点?
答案 0 :(得分:1)
也许使用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))