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.0.tar.gz (29.7 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: sigmaepsilon.deepdict-1.2.0.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.0.tar.gz
Algorithm Hash digest
SHA256 167a9f571ea5bba106d95cc9da9badf8061ea2c892f3f7d8c8821ab63dce9aeb
MD5 d1243caa2e46397a8380569bd03cab21
BLAKE2b-256 f24a760a98786ee487ed85d0746c94bbd5d6c6d1f845c33f9b3626470d15728e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sigmaepsilon.deepdict-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6b0f1443441394a6db24046774be24e5e2cce6e646e38bdc0092c2977e94989e
MD5 b61f105a1920196871612ff533df0a4b
BLAKE2b-256 8926666042f2ba686d7e7a61cae33523b4aa76d45053e9e8fadee6eb81219d77

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