2016-10-03 125 views
0

我试图实现三个层次的嵌套,因为我需要对一些数据进行分组。Python:三层嵌套与列表理解

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

要澄清一下,我们有这样的:

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

可以扩大每场比赛使用嵌套列表理解获得从当前的结果所需要的属性:

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

你不需要反斜线:开括号上下文允许你将在继续的发言多行。 –

+0

@ PM2Ring你说得对。通常我不确定,所以我只是保持一个安全:) –