Skip to main content

minimalistic library for attribute-based access to dictionaries and other mappings

Project description

attribute-mapping is a minimalistic Python library for attribute-based access to dictionaries and other mappings.

Compared to many other implementations of the same idea, going by names such as AttrDict and various others, this library is extremely minimal and free of cruft:

  • Almost no API
  • AttributeMapping instances do not pretend to be a dict
  • Can be used with dict as well as other objects implementing the abstract base class
  • No restrictions on key/attribute names
  • No unpleasant surprises in behaviour or weird corner cases
  • Modern code; Python 3.4+ only
  • 100% test coverage


python -m pip install attribute-mapping


Make an AttributeMapping instance by passing a dictionary or another mapping:

from attribute_mapping import AttributeMapping

d = {"a": 1, "b": {"c": 2, "d": 3}}
x = AttributeMapping(d)

Now you can access the contents using attribute lookups:

x.a  # gives 1
x.b.c  # gives 2 = 123
hasattr(x, "foo")  # True

In addition to attribute access, subscription (__getitem__ and friends) and containment checks (in) also work:

x["a"]  # gives 1
x["b"]["c"]  # gives 2
x["foo"] = 123
"foo" in x  # True
del x["foo"]

However, there are no other dict-like methods or reserved names, so you can happily use attributes like keys and items:

x.items = [1, 2, 3]

Iteration yields (key, value) tuples, just like .items() on normal mappings would do:

for key, value in x:

Finally, to obtain the original object that was used for the AttributeMapping, use the built-in vars() function:

d = {"a": 1}
x = AttributeMapping(d)
vars(x) is d  # True


This library is written by wouter bolsterlee (wbolster).

There are a gazillion similar implementations, so the author thanks the whole Python community for the inspiration to make yet another implementation of this idea.

Version history

  • 1.3.0 (2019-03-13)
    • Add support for len()
  • 1.2.0 (2019-03-12)
    • Add support for (in)equality tests
  • 1.1.0 (2019-03-09)
    • Add support for custom mappings
  • 1.0.0 (2019-03-08)
    • Initial release


BSD; see LICENSE file for details.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

attribute-mapping-1.3.0.tar.gz (4.0 kB view hashes)

Uploaded source

Built Distribution

attribute_mapping-1.3.0-py3-none-any.whl (4.2 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page