A dot-accessible dictionary (a la JavaScript objects)
Project description:
>>> b = Munch() >>> b.>> b.hello 'world' >>> b['hello'] += "!" >>> b.hello 'world!' >>> b.foo = Munch(lol=True) >>> b.foo.lol True >>> b.foo is b['foo'] True
Dictionary Methods
A Munch is a subclass of
dict; it supports all the methods a
dict does:
>>> list(b.keys()) ['hello', 'foo']
Including
update():
>>> b.update({ 'ponies': 'are pretty!' }, hello=42) >>> print(repr(b)) Munch({'hello': 42, 'foo': Munch({'lol': True}), 'ponies': 'are pretty!'})
As well as iteration:
>>> [ (k,b[k]) for k in b ] [('hello', 42), ('foo', Munch({'lol': True})), ('ponies', 'are pretty!')]
And "splats":
>>> "The {knights} who say {ni}!".format(**Munch(knights='lolcats', ni='can haz')) 'The lolcats who say can haz!'
Serialization
Munches happily and transparently serialize to JSON and 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!"}'.
>>> b = Munch(foo=Munch(lol=True), hello=42,>> yaml.safe_dump(b) 'foo:\n.
Default Values
DefaultMunch instances return a specific default value when an attribute is missing from the collection. Like
collections.defaultdict, the first argument is the value to use for missing keys:
>>> undefined = object() >>> b = DefaultMunch(undefined, {'hello': 'world!'}) >>> b.hello 'world!' >>> b.foo is undefined True
DefaultMunch.fromDict() also takes the
default argument:
>>> undefined = object() >>> b = DefaultMunch.fromDict({'recursively': {'nested': 'value'}}, undefined) >>> b.recursively.nested == 'value' True >>> b.recursively.foo is undefined True
Or you can use
DefaultFactoryMunch to specify a factory for generating missing attributes. The first argument is the factory:
>>> b = DefaultFactoryMunch(list, {'hello': 'world!'}) >>> b.hello 'world!' >>> b.foo [] >>> b.bar.append('hello') >>> b.bar ['hello']
Miscellaneous
- It is safe to
import *from this module. You'll get:
Munch,
DefaultMunch,
DefaultFactoryMunch,
munchifyand
unmunchify.
- Ample Tests. Just run
pip install tox && toxfrom the project root.
Feedback
Open a ticket / fork the project on GitHub.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.