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

如何基于条件更新多个字典值且保留不满足条件的项

基于条件更新字典值且保留所有项的解决方案

我猜你之前可能是用了过滤类的操作(比如只把满足条件的项保留并更新),才会导致不满足条件的项被移除对吧?其实核心思路很简单:遍历所有字典项,只对符合条件的项做更新,不符合的直接原封不动保留,而不是筛选掉它们。

下面我用具体的例子来演示,假设你的原始字典列表是这样的:

original_data = [
    {"id": 1, "status": "active", "score": 80},
    {"id": 2, "status": "inactive", "score": 75},
    {"id": 3, "status": "active", "score": 90}
]

我们的目标是把status为active的项的score加10,同时保留所有三个条目,而不是只留下active的项。

方法一:普通循环(直观易读)

这种方式适合新手,逻辑清晰,不容易出错:

updated_data = []
for item in original_data:
    # 先复制原字典,避免修改原始数据(如果不需要保留原数据可以跳过这步)
    new_item = item.copy()
    # 判断条件,满足就更新对应值
    if new_item["status"] == "active":
        new_item["score"] += 10
    # 不管是否满足条件,都把这个项加入新列表
    updated_data.append(new_item)

print(updated_data)

运行后你会得到三个项,其中active的score变成了90和100,inactive的75保持不变。

方法二:列表推导式(简洁高效)

如果你喜欢更简洁的写法,可以用列表推导式,一行搞定:

updated_data = [
    {**item, "score": item["score"] + 10} if item["status"] == "active" else item.copy()
    for item in original_data
]

这里用**item解包原字典的所有键值对,满足条件时就覆盖score的值,不满足就直接复制原字典,同样能保留所有项。

处理嵌套字典的情况

如果你的字典是嵌套结构(比如里面还有子字典),那浅拷贝copy()就不够用了,得用深拷贝来避免修改原数据的嵌套部分:

import copy

original_data = [
    {"id": 1, "info": {"status": "active", "score": 80}},
    {"id": 2, "info": {"status": "inactive", "score": 75}}
]

updated_data = []
for item in original_data:
    # 深拷贝整个字典,包括嵌套的子字典
    new_item = copy.deepcopy(item)
    if new_item["info"]["status"] == "active":
        new_item["info"]["score"] += 10
    updated_data.append(new_item)

关键注意点

  • 不要用过滤操作(比如[item for item in data if 条件]),这种会直接丢掉不满足条件的项;我们要做的是遍历所有项,按需更新
  • 尽量创建字典副本,避免直接修改原始数据(除非你明确不需要保留原数据)
  • 嵌套字典一定要用深拷贝,否则修改嵌套值时会影响原数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:31:09