一个可点访问的字典(类似于JavaScript对象)
项目描述
munch
安装
pip install munch
使用
munch是David Schoonover的Bunch软件包的分支,提供类似的功能。99%的工作由他完成,分支主要是为了缺乏对原始代码的修复和维护的响应。
Munch是一个支持属性样式访问的字典,类似于JavaScript
>>> from munch import Munch
>>> b = Munch()
>>> b.hello = 'world'
>>> b.hello
'world'
>>> b['hello'] += "!"
>>> b.hello
'world!'
>>> b.foo = Munch(lol=True)
>>> b.foo.lol
True
>>> b.foo is b['foo']
True
字典方法
“Munch” 是 dict
的子类;它支持所有 dict
的方法
>>> list(b.keys())
['hello', 'foo']
包括 update()
>>> b.update({ 'ponies': 'are pretty!' }, hello=42)
>>> print(repr(b))
Munch({'hello': 42, 'foo': Munch({'lol': True}), 'ponies': 'are pretty!'})
以及迭代
>>> [ (k,b[k]) for k in b ]
[('hello', 42), ('foo', Munch({'lol': True})), ('ponies', 'are pretty!')]
和“splat”
>>> "The {knights} who say {ni}!".format(**Munch(knights='lolcats', ni='can haz'))
'The lolcats who say can haz!'
序列化
Munch 可以愉快且透明地将数据序列化为 JSON 和 YAML 格式。
>>> b = Munch(foo=Munch(lol=True), hello=42, ponies='are pretty!')
>>> import json
>>> json.dumps(b)
'{"foo": {"lol": true}, "hello": 42, "ponies": "are pretty!"}'
如果存在 JSON 支持(json
或 simplejson
),Munch
将拥有一个 toJSON()
方法,该方法返回一个 JSON 字符串。
如果您已安装 PyYAML,Munch 会尝试将自己注册到各种 YAML 表示器,以便 Munch 对象可以被透明地保存和加载。
>>> b = Munch(foo=Munch(lol=True), hello=42, ponies='are pretty!')
>>> import yaml
>>> yaml.dump(b)
'!munch.Munch\nfoo: !munch.Munch\n lol: true\nhello: 42\nponies: are pretty!\n'
>>> yaml.safe_dump(b)
'foo:\n lol: true\nhello: 42\nponies: are pretty!\n'
此外,Munch 实例将拥有一个 toYAML()
方法,该方法使用 yaml.safe_dump()
返回 YAML 字符串。如果存在,该方法还会替换 __str__
,因为我认为它更易于阅读。您可以通过以下简单的赋值恢复到 Python 的默认 __repr__
使用:Munch.__str__ = Munch.__repr__
。Munch 类还将拥有一个静态方法 Munch.fromYAML()
,该方法从 YAML 字符串加载 Munch 对象。
最后,Munch 可以轻松地递归转换为(unmunchify()
、Munch.toDict()
)和从(munchify()
、Munch.fromDict()
)普通 dict
转换,这使得在其他格式中干净地序列化它们变得容易。
默认值
DefaultMunch
实例在集合中缺少属性时返回一个特定的默认值。与 collections.defaultdict
类似,第一个参数是用于缺失键的值
>>> from munch import DefaultMunch
>>> undefined = object()
>>> b = DefaultMunch(undefined, {'hello': 'world!'})
>>> b.hello
'world!'
>>> b.foo is undefined
True
DefaultMunch.fromDict()
也接受 default
参数
>>> undefined = object()
>>> b = DefaultMunch.fromDict({'recursively': {'nested': 'value'}}, undefined)
>>> b.recursively.nested == 'value'
True
>>> b.recursively.foo is undefined
True
或者,您可以使用 DefaultFactoryMunch
来指定生成缺失属性的工厂。第一个参数是工厂
>>> from munch import DefaultFactoryMunch
>>> b = DefaultFactoryMunch(list, {'hello': 'world!'})
>>> b.hello
'world!'
>>> b.foo
[]
>>> b.bar.append('hello')
>>> b.bar
['hello']
杂项
- 从该模块导入
import *
是安全的。您将获得:Munch
、DefaultMunch
、DefaultFactoryMunch
、munchify
和unmunchify
。 - 充足的测试。只需从项目根目录运行
pip install tox && tox
。
反馈
在 GitHub 上创建工单/分支项目。
项目详情
下载文件
下载适合您平台的应用程序。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发
munch-4.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 542cb151461263216a4e37c3fd9afc425feeaf38aaa3025cd2a981fadb422235 |
|
MD5 | 4e70cf760e3b81dcaa6050803c1dbd72 |
|
BLAKE2b-256 | e72b45098135b5f9f13221820d90f9e0516e11a2a0f55012c13b081d202b782a |