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

如何以更Pythonic的方式修改嵌套字典列表结构中的指定值?

问题描述

给定如下Python字典结构:

pd = {
    "RP": [
        {
        "Name": "PD",
        "Value": "qwe"
        },
        {
        "Name": "qwe",
        "Value": "change"
        }
    ],
    "RFN": [
        "All"
    ],
    "RIT": [
        {
        "ID": "All",
        "IDT": "All"
        }
    ]
}

需要将字典内列表中子字典里值为"change"的元素修改为"changed"。当前使用的实现方式如下,但因多次遍历数据,认为效率较低,询问是否有更高效、更符合Python风格的实现方式:

for key, value in pd.items():
    ls = pd[key]
    for d in ls:
        if type(d) == dict:
            for k,v in d.items():
                if v == 'change':
                   pd[key][ls.index(d)][k] = "changed"
优化方案

你的代码有几个可以改进的地方,优化后不仅效率更高,也更符合Python的写法习惯:

  • 不需要用pd[key][ls.index(d)]定位字典,遍历到子字典时直接修改它就行,ls.index(d)会额外遍历列表找索引,属于不必要的性能浪费
  • 判断类型用isinstance(item, dict)比type(d) == dict更合理,能兼容字典子类的情况
  • 直接遍历字典的值,不用多余的键变量

优化后的通用版代码:

for lst in pd.values():
    for item in lst:
        if isinstance(item, dict):
            for k, v in item.items():
                if v == "change":
                    item[k] = "changed"

如果明确知道要修改的是RP列表里子字典的Value键,可以直接精准定位,进一步减少遍历范围:

for item in pd["RP"]:
    if isinstance(item, dict) and item.get("Value") == "change":
        item["Value"] = "changed"

这个版本效率更高的原因:

  1. 省去了查找列表索引的额外遍历开销
  2. 精准定位目标数据时,不用遍历所有键值对,直接判断指定键的值
  3. 代码更简洁易读,符合Python的“直白胜于晦涩”原则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:45:42