[英]python merge two query sets and addition of matching records
我需要将两个查询集与simalar数据合并在一起。
第一组(统计数据)包含球队名单,该球队的总积分以及该球队所在的部门。
第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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.