Skip to main content

Dictionary wrapper that provides dot notation access to nested dictionaries

Project description

dotty-dictionary

PyPI version Testsuite Python version Project Status Supported Interpreters License

dotty-dictionary is a Python library that provides a dictionary-like object that allows you to access nested dictionaries using dot notation.

dotty-dictionary is a fork of pawelzny/dotty-dict that provides additional features and improvements.

Features

  • Simple wrapper around python dictionary and dict like objects
  • Two wrappers with the same dict are considered equal
  • Access to deeply nested keys with dot notation: dot['deeply.nested.key']
  • Create, read, update and delete nested keys of any length
  • Expose all dictionary methods like .get, .pop, .keys and other
  • Access dicts in lists by index dot['parents.0.first_name']
  • Support for setting value in multidimensional lists
  • Support for accessing lists with slices
  • Support for flattening nested dictionary keys from a dotty dictionary and vice versa
  • Support for iteration over nested dictionary keys (e.g. for key in dotty_dict_instance)

Installation

pip install dotty-dictionary

Quick Example

Create new dotty using factory function.

from dotty_dict import dotty
dot = dotty({'plain': {'old': {'python': 'dictionary'}}})
dot['plain.old']
{'python': 'dictionary'}

You can start with empty dotty

from dotty_dict import dotty
dot = dotty() # Alias: `Dotty.empty()`
dot['very.deeply.nested.thing'] = 'spam'
dot
Dotty(dictionary={'very': {'deeply': {'nested': {'thing': 'spam'}}}}, separator='.', esc_char='\\')

dot['very.deeply.spam'] = 'indeed'
dot
Dotty(dictionary={'very': {'deeply': {'nested': {'thing': 'spam'}, 'spam': 'indeed'}}}, separator='.', esc_char='\\')

del dot['very.deeply.nested']
dot
Dotty(dictionary={'very': {'deeply': {'spam': 'indeed'}}}, separator='.', esc_char='\\')

dot.get('very.not_existing.key')
None

You can utilize to_flat_dict and from_flat_dict to convert dotty to and from flat dictionary.

from dotty_dict import Dotty
dot = Dotty.from_flat_dict({'very.deeply.nested.thing': 'spam', 'very.deeply.spam': 'indeed'})
dot
Dotty(dictionary={'very': {'deeply': {'nested': {'thing': 'spam'}, 'spam': 'indeed'}}}, separator='.', esc_char='\\')

dot.to_flat_dict()
{'very.deeply.nested.thing': 'spam', 'very.deeply.spam': 'indeed'}

More examples can be found in the examples directory.

[!NOTE]
Using integer in dictionary keys will be treated as embedded list index.

Contributing

Any contribution is welcome! Check out CONTRIBUTING.md and CODE_OF_CONDUCT.md for more information on how to get started.

License

dotty-dictionary is licensed under a MIT License.

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

dotty_dictionary-1.1.0.tar.gz (8.1 kB view hashes)

Uploaded Source

Built Distribution

dotty_dictionary-1.1.0-py3-none-any.whl (8.1 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page