我需要将两个查询集与simalar数据合并。
第1组(统计数据)包含一个团队列表,该团队的总积分以及该团队所在的部门。
Set 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
答案 0 :(得分:1)
您永远不会将非备用团队统计信息放入结果字典中。我建议首先加载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'])
应该完成你之后的事情。
答案 1 :(得分:0)
@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