Skip to main content

Linked deep dictionaries in Python.

Project description

SigmaEpsilon.DeepDict - A lightweight Python library to handle nested dictionaries

CircleCI codecov Documentation Status License PyPI Python 3.7‒3.10 Code style: black Requirements Status

The DeepDict class works very similarly to a regular dict, but makes life easier in sutiations where there are nested levels, especially when such dictionary is to be created dynamically.

Motivating examples

Consider the following simple dictionary

>>> d = {
...   "a" : {"aa" : 1},
...   "b" : 2,
...   "c" : {"cc" : {"ccc" : 3}}, 
... }

This is what happens when you iterate through the values of it:

>>> list(d.values())
[{'aa': 1}, 2, {'cc': {'ccc': 3}}]

If you wrap it as a DeepDict:

>>> from sigmaepsilon.deepdict import DeepDict
>>> dd = DeepDict.wrap(d)
>>> list(dd.values(deep=True))
[1, 2, 3]

The class supports array-like indexing, which combined with the default factory creates the possibility to create deep levels without having to create all the parents:

>>> data = DeepDict()
>>> data["a", 0, "b", 1, 5] = 10

Each subdirectory is aware about it's parent container

>>> data["a", 0, "b"].key
"b"
>>> data["a", 0, "b"].address
['a', 0, 'b']
>>> data["a", 0, "b"].parent.key
0

Given that the asciitree library is installed, it is also possible to print dictionaries (any kind) as a tree:

>>> from sigmaepsilon.deepdict import asciiprint
>>> d = {
...     "a" : {"aa" : 1},
...     "b" : 2,
...     "c" : {"cc" : {"ccc" : 3}},
... }
>>> data = DeepDict.wrap(d)
>>> data.name = "Data"
>>> asciiprint(data)
Data
    +-- a
    +-- c
        +-- cc

See the documentation for more examples and explanation on behaviour.

Documentation

The documentation is built with Sphinx using the PyData Sphinx Theme and hosted on ReadTheDocs.

Installation

This is optional, but we suggest you to create a dedicated virtual enviroment at all times to avoid conflicts with your other projects. Create a folder, open a command shell in that folder and use the following command

>>> python -m venv venv_name

Once the enviroment is created, activate it via typing

>>> .\venv_name\Scripts\activate

The library can be installed (either in a virtual enviroment or globally) from PyPI using pip on Python >= 3.7:

>>> pip install sigmaepsilon.deepdict

License

This package is licensed under the 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

sigmaepsilon.deepdict-1.2.1.tar.gz (29.7 kB view details)

Uploaded Source

Built Distribution

sigmaepsilon.deepdict-1.2.1-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

File details

Details for the file sigmaepsilon.deepdict-1.2.1.tar.gz.

File metadata

  • Download URL: sigmaepsilon.deepdict-1.2.1.tar.gz
  • Upload date:
  • Size: 29.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.13

File hashes

Hashes for sigmaepsilon.deepdict-1.2.1.tar.gz
Algorithm Hash digest
SHA256 a7b9b90cdee7b66a47dc9ff5f9e8a9f7bff24cb6e8ec549d17999358e7a4a940
MD5 63ce18e4aff034d15e25be328fe4745c
BLAKE2b-256 bb8dc6e0ccd9400cbc72e8842d19642d4c0a29b3654e4ed9d10b53af3e12a7e0

See more details on using hashes here.

File details

Details for the file sigmaepsilon.deepdict-1.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for sigmaepsilon.deepdict-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b988de367569859b501dbd59f312f56454c34e4422204d1fe30250549c4606bb
MD5 225122ee020de8a755b09dd5fa70726e
BLAKE2b-256 593400e6b0af086fc5fdd2c32fb1ea83a06ae6a6ce928846fb6fe20c5bb2ba22

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