Skip to main content

Dictionary wrapper for quick access to deeply nested keys.

Project description

Info:

Dictionary wrapper for quick access to deeply nested keys.

Author:

Pawel Zadrozny @pawelzny <pawel.zny@gmail.com>

This is a package published by QMK (https://qmk.fm) since the current dotty-dict published to pypi has non-ASCII characters that breaks with some non-UTF8 locale settings.

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']

  • key=value caching to speed up lookups and low down memory consumption

  • support for setting value in multidimensional lists

  • support for accessing lists with slices

Installation

pip install dotty-dict

Documentation

TODO

Waiting for your feature requests ;)

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()
>>> 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

NOTE: Using integer in dictionary keys will be treated as embedded list index.

Install for development

Install dev dependencies

$ make install

Testing

$ make test

Or full tests with TOX:

$ make test-all

Limitations

In some very rare cases dotty may not work properly.

  • When nested dictionary has two keys of different type, but with the same value. In that case dotty will return dict or list under random key with passed value.

  • Keys in dictionary may not contain dots. If you need to use dots, please specify dotty with custom separator.

  • Nested keys may not be bool type. Bool type keys are only supported when calling keys with type defined value (e.g. dot[True], dot[False]).

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

qmk_dotty_dict-1.3.0.post1.tar.gz (34.5 kB view details)

Uploaded Source

Built Distribution

qmk_dotty_dict-1.3.0.post1-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file qmk_dotty_dict-1.3.0.post1.tar.gz.

File metadata

  • Download URL: qmk_dotty_dict-1.3.0.post1.tar.gz
  • Upload date:
  • Size: 34.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.7.10

File hashes

Hashes for qmk_dotty_dict-1.3.0.post1.tar.gz
Algorithm Hash digest
SHA256 3b611e393660bfaa6835c68e94784bae80fe07b8490978b5ecab03a0d2fc7ea2
MD5 3ad0ce9d75fae0968204dea6db1eb6af
BLAKE2b-256 8d6619e6e56e6839c495e5fcb258b07bbd4a7879a2865de84c35e12074484ea6

See more details on using hashes here.

File details

Details for the file qmk_dotty_dict-1.3.0.post1-py3-none-any.whl.

File metadata

  • Download URL: qmk_dotty_dict-1.3.0.post1-py3-none-any.whl
  • Upload date:
  • Size: 7.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.7.10

File hashes

Hashes for qmk_dotty_dict-1.3.0.post1-py3-none-any.whl
Algorithm Hash digest
SHA256 a9cb7fc3ff9631190fee0ecac14986a0ac7b4b6892347dc9d7486a4c4ea24492
MD5 e14f8d3dc3937bf05399fcd3efa9e08d
BLAKE2b-256 b21a05fe9265206c0645b7ecf3384ba4de7f30b1507e7f5b16c4f0a440aff9dc

See more details on using hashes here.

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