Python:使用列表理解进行嵌套的三个级别

时间:2016-10-03 09:54:11

标签: python python-2.7

我正在尝试实现三个级别的嵌套,因为我需要对一些数据进行分组。

我有一个匹配列表,每个匹配都属于特定轮次。我想将这些匹配重新组合成每轮的单独嵌套列表,除了我不想将整个匹配存储在这些列表中,而只是存储得分。

澄清一下,我们有这个:

all_matches = [final_match, semifinal1_match, semifinal2_match]

这些匹配包含roundhome_scoreaway_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]]

这不是我所追求的。我无法弄清楚列表理解语法如何仅将每个匹配的分数(在列表中)提取到其各自的轮次列表中,而不是在那里进行整个匹配。

1 个答案:

答案 0 :(得分:2)

您可以使用嵌套的列表理解扩展每个匹配项,从当前结果中获取所需的属性:

[[[m.home_score, m.away_score] for m in matches]
                               for _, matches in groupby(all_matches, key=attrgetter('round'))]