【发布时间】:2018-07-01 19:06:32
【问题描述】:
我需要将两个查询集与相似数据合并在一起。
第 1 组(统计数据)包含球队列表、该球队的总分以及该球队所在的分区。
第 2 组(备件)有一个团队列表,其中包含有成员备用件,其中包括团队和积分(此组没有分区)。
我想做的是将查询集合并为一个,当团队匹配时,只需将备用点添加到团队总数中,保留团队名称和分区。
我在下面使用的代码可以满足我的要求,只是它不包括从未有过备用的团队。
考虑以下数据。
统计列表
- 第 1 队:8 分:A 组
- 第 2 队:3 分:B 区
- 第 3 队:7 分:A 组
- 第 4 队:5 分:B 区
- 第 5 队:4 分:A 组
备件清单
- 第 1 队:3 分
- 第 3 队:6 分
所以我想要做的是合并这两个列表,其中球队匹配但合计他们的分数。在这种情况下,最终列表如下所示:
最终名单
- 第 1 队:11 分:A 组
- 第 2 队:3 分:B 区
- 第 3 队:13 分:A 组
- 第 4 队:5 分:B 区
- 第 5 队:4 分:A 组
第 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
【问题讨论】:
标签: python django list django-queryset array-merge