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

时间:2018-01-23 03:15:54

标签: python django list django-queryset array-merge

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

第1组(统计数据)包含一个团队列表,该团队的总积分以及该团队所在的部门。

Set 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

2 个答案:

答案 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