繁体   English   中英

python合并两个查询集并添加匹配记录

[英]python merge two query sets and addition of matching records

我需要将两个查询集与simalar数据合并在一起。

第一组(统计数据)包含球队名单,该球队的总积分以及该球队所在的部门。

第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

您永远不会将非备用团队的统计信息放入结果字典。 我建议先加载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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM