我正在尝试实现三个级别的嵌套,因为我需要对一些数据进行分组。
我有一个匹配列表,每个匹配都属于特定轮次。我想将这些匹配重新组合成每轮的单独嵌套列表,除了我不想将整个匹配存储在这些列表中,而只是存储得分。
澄清一下,我们有这个:
all_matches = [final_match, semifinal1_match, semifinal2_match]
这些匹配包含round
,home_score
和away_score
等属性。我想要做的是按以下方式对它们进行分组:
[
[[1, 3], [2, 0]], # semifinal
[[1, 0]] # final round
]
我设法通过它们所属的回合将匹配分组到嵌套列表中:
[list(matches) for round, matches in groupby(all_matches, key=attrgetter('round'))]
这就是结果:
[[semifinal1_match, semifinal2_match], [final_match]]
这不是我所追求的。我无法弄清楚列表理解语法如何仅将每个匹配的分数(在列表中)提取到其各自的轮次列表中,而不是在那里进行整个匹配。
答案 0 :(得分:2)
您可以使用嵌套的列表理解扩展每个匹配项,从当前结果中获取所需的属性:
[[[m.home_score, m.away_score] for m in matches]
for _, matches in groupby(all_matches, key=attrgetter('round'))]