跳转至

literal-dict

literal-dict 让构建嵌套 dict 像 JS 对象一样流畅。DictBuilder().a.b.c = 1 然后 .build() 出 dict。

https://github.com/CNSeniorious000/literal-dict

实现

__getattr__ 懒创建子 builder,__setattr__ 赋值。支持自定义构造函数,比如 DotDict

from literal_dict import DictBuilder

d = DictBuilder()
d.foo.bar = 'baz'
result = d.build()  # {'foo': {'bar': 'baz'}}

自引用

d.self = d 这种递归也行。

深入洞见

核心实现落在 DictBuilder.__getitem__(源码位于 src/literal_dict.py):它读取调用者的栈帧(inspect.currentframe().f_back)并在 locals → globals → builtins 中按“first match wins”把名字解析为值,从而在一次索引/赋值操作里把变量名变成字典键。项目并非通过链式 .a.b.c 修改深层嵌套(这是常见误解),而是靠一次性解析和可定制的构造器(测试里有 DotDict 示例)。这种做法语义明确且对日常构造很方便,但依赖栈帧语义,可能在不同 Python 实现或在某些安全/优化场景下变得脆弱。

参考源码:src/literal_dict.py(实现) · test.py(示例/测试)

相关文档:inspect.currentframe(Python docs)

相关:

  • addict:访问时自动创建。
  • munch:JSON 互转。

配置或数据结构定义时超方便。