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

问题描述 投票:0回答:2

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

第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
2个回答
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'])

应该完成你所追求的目标。


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
© www.soinside.com 2019 - 2024. All rights reserved.