我需要将两个查询集与类似的数据合并在一起。
第1组(统计数据)包含一个团队列表,该团队的总积分以及团队所在的部门。
第2组(备件)有一个团队列表,这些团队有一个成员备用,其中包括团队和积分(此集合没有划分)。
我想要做的是将查询集合并为一个,当团队匹配时,只需将备用点添加到团队总数中,保留团队名称和部门。
我在下面使用的代码将做我正在寻找的东西,除了它不包括从来没有备用的团队。
请考虑以下数据。
统计列表
备件清单
所以我想要做的是将这两个列表合并到团队匹配的位置,但总计他们的积分。在这种情况下,最终列表将如下所示:
最终名单
团队1和团队3从备件列表中添加了新总数。
我现在使用的代码对我来说不起作用,接近我想要的
full_stats = {}
for stat in stats:
for spare in spares:
if stat['team'] == spare['team']:
tot_points = int(stat['points']) + int(spare['points'])
full_stats.append([stat['team'],tot_points],stat['division'])
break
else:
continue
full_stats
将只向我展示有备件的车队(第1队和第3队)
如果我将full_stats.append([stat['team'],stat['points'],stat['division'])
添加到else,它将复制数据。所以它会告诉我7项。哪个是统计列表中的5个原始团队点数,然后是团队1和团队3的两个新总计。
我知道我在这里有一个逻辑上的误解,但我无法弄清楚如何添加这些,并且只向我展示5个团队,其中备件列表中的重复项添加到统计列表中,并且具有相同名称的团队。
我在django视图中执行此操作,并将full_stats的结果呈现给模板。
任何帮助,将不胜感激。
谢谢,jAC
您永远不会将非备用团队统计信息放入结果字典中。我建议首先加载stats
,然后使用spares
中的信息进行更新。我让得分和分裂只是团队关键词的两元组成员。
full_stats = {}
for stat in stats:
full_stats[stat['team']] = (int(stat['points'],stat['division'])
for spare in spares:
team = spare['team']
if team in full_stats:
full_stats[team] = full_stats[team(0)] + int(spare['points'])
应该完成你所追求的目标。
@Alan-hover答案接近我想要的但我不希望第二个元组在那里迭代。但是,将for循环分开而不是试图以嵌套的方式进行操作,这给了我正确的方向。感谢Alan。
以下是我为此工作所做的代码更改。
full_stats = []
for stat in stats:
full_stats.append({'team': stat['team'],'points': stat['points']})
for stat in full_stats:
for spare in spares:
if stat['team'] == spare['team']:
total_points = int(stat['points']) + int(spare['points'])
stat['points'] = total_points