You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中append重复添加同一数据问题求助

问题分析与解决方案

嘿,这个问题我之前也踩过坑!核心原因其实很简单:你从头到尾都在复用同一个gameInfo字典对象。

你每次调用gameInfo.update(...)只是修改这个字典里的内容,而finalPush["games"].append(gameInfo)添加的是这个字典的引用,不是它的副本。所以当循环结束时,列表里的6个元素其实全都是指向同一个字典对象,自然显示的都是最后一次修改后的那场赛事信息。

解决办法:每次循环创建新的字典

把gameInfo的模板定义移到while循环内部,让每次循环都生成一个全新的字典实例,这样每场赛事的信息都会存在独立的对象里。

修改后的代码如下:

def add_game_info_to_json():
    finalPush = {"games": []}
    with open('teamMaster.json') as f:
        data = json.load(f)
    i = 0
    z = 0
    while i < (len(teams_list)/2):
        # 关键修改:每次循环都新建一个gameInfo字典实例
        gameInfo = {
            "teamHome": "",
            "teamAway": "",
            "recordHome": "",
            "recordAway": "",
            "colorHome": "",
            "colorAway": "",
            "line": "",
            "overunder": "",
            "homeTextColor": "",
            "awayTextColor": "",
            "homeIndex": "",
            "awayIndex": "",
            "time": ""
        }
        gameInfo.update(time = game_status_list[i])
        gameInfo.update(teamAway = teams_list[i+z])
        gameInfo.update(recordAway = records_list[i + z])
        gameInfo.update(line = betting_list[i + z])
        for team in data:
            if team == gameInfo["teamAway"]:
                gameInfo.update(colorAway = data[team]["color"])
                gameInfo.update(awayTextColor = data[team]["textColor"])
                gameInfo.update(awayIndex = data[team]["index"])
        z += 1
        gameInfo.update(teamHome = teams_list[i+z])
        gameInfo.update(recordHome = records_list[i + z])
        gameInfo.update(overunder = betting_list[i + z])
        for team in data:
            if team == gameInfo["teamHome"]:
                gameInfo.update(colorHome = data[team]["color"])
                gameInfo.update(homeTextColor = data[team]["textColor"])
                gameInfo.update(homeIndex = data[team]["index"])
        print(gameInfo)
        i += 1
        finalPush["games"].append(gameInfo)
    print(finalPush)

为什么这样能解决问题?

每次进入循环,都会生成一个全新的gameInfo字典,这个字典和之前循环里的字典是完全独立的对象。当你把它append到finalPush["games"]里时,添加的是这个新字典的引用,每场赛事的信息都会被单独保存,不会被后续循环的修改覆盖。

另外提一句,你代码里的z变量逻辑有点绕,不过这不是导致重复的原因,如果后续想优化代码,可以考虑用更清晰的方式来遍历赛事数据,但先解决当前的核心问题就好啦。

内容的提问来源于stack exchange,提问作者GERG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:10:56