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

如何通过点分隔字符串路径为Python嵌套字典的指定项赋值?

点分隔路径操作嵌套字典实现方案

第三方库方案

现有成熟的第三方库可以直接满足需求,不用自己造轮子:

  • python-box:支持原生点语法访问,也兼容你需要的字符串点路径写法
    安装命令:pip install python-box
    使用示例:
    from box import Box
    
    data_dictionary = {
      "user_data": {
        "first_name": "Some",
        "last_name": "Guy",
        "phone": "212-111-1234"
      }
    }
    
    data = Box(data_dictionary)
    # 直接按你想要的写法赋值
    data['user_data.phone'] = '818-333-4567'
    # 也支持直接点属性访问:data.user_data.phone = '818-333-4567'
    # 需要转回普通字典调用 data.to_dict() 即可
    
  • glom:专门用于嵌套数据结构的读写,适合处理更复杂的嵌套场景
    安装命令:pip install glom
    使用示例:
    import glom
    
    data_dictionary = {
      "user_data": {
        "first_name": "Some",
        "last_name": "Guy",
        "phone": "212-111-1234"
      }
    }
    
    glom.assign(data_dictionary, 'user_data.phone', '818-333-4567')
    # 读取对应值用 glom.glom(data_dictionary, 'user_data.phone')
    

原生Python实现方案

如果不想引入额外依赖,可以自定义继承自dict的类,直接实现你要的语法:

class DotAccessDict(dict):
    def __getitem__(self, key):
        if '.' not in key:
            return super().__getitem__(key)
        current = self
        for k in key.split('.'):
            current = current[k]
        return current
    
    def __setitem__(self, key, value):
        if '.' not in key:
            return super().__setitem__(key, value)
        keys = key.split('.')
        current = self
        # 定位到最后一级父字典
        for k in keys[:-1]:
            current = current[k]
        current[keys[-1]] = value

使用示例:

data_dictionary = DotAccessDict({
  "user_data": {
    "first_name": "Some",
    "last_name": "Guy",
    "phone": "212-111-1234"
  }
})

# 完全符合你需要的写法
data_dictionary['user_data.phone'] = '818-333-4567'
# 读取也支持相同语法
print(data_dictionary['user_data.phone'])

如果需要支持自动创建中间不存在的嵌套层级,只要在逐层遍历的时候增加判断:如果当前层级没有对应key,自动创建空字典即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:27:04