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

Python如何修改字典值(列表)中依赖另一字典的指定元素

实现方法

你不需要在每次遍历到作弊题号时都调用update替换整个列表,存储得分的列表是Python可变对象,直接定位对应索引修改值即可,逻辑更简洁、运行效率更高。

正确实现代码

# 原始数据
user_probstat_dict = {'106095014': [3, 1, 1], '106095029': [3, 1, 0], '106095033': [3, 1, 0]}
user_cheatprob_dict = {'106095029': [1, 3], '106095033': [3]}

for user_id, cheat_probs in user_cheatprob_dict.items():
    # 取出当前学生的得分列表(拿到的是原列表的引用,修改会直接同步到字典中)
    score_list = user_probstat_dict[user_id]
    for prob_id in cheat_probs:
        # 题目编号从1开始,列表索引从0开始,做偏移转换
        score_index = prob_id - 1
        # 直接将对应位置得分置0
        score_list[score_index] = 0

运行后打印user_probstat_dict即可得到预期结果:

{'106095014': [3, 1, 1], '106095029': [0, 1, 0], '106095033': [0, 1, 0]}

关于你原有代码中???位置的补充说明

如果你坚持要用update方法替换整个值(不推荐,每次循环都要生成新列表,存在冗余开销),需要先复制原得分列表,修改对应索引位置的值后再传入,写法如下:

for u, c in user_cheatprob_dict.items():
    for ci in c:
        prob_ind = ci - 1
        # 复制原得分列表
        new_score_list = user_probstat_dict[u].copy()
        # 修改对应位置为0
        new_score_list[prob_ind] = 0
        user_probstat_dict.update({u: new_score_list})

注意:如果不先复制列表直接修改原列表再传入,虽然也能得到正确结果,但update操作完全是多余的,没有实际意义。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:21:25