Skip to main content

Dotli


Build Status PyPI - Python Version PyPI Downloads

Yet another library for flattening structures

Installation

pip install dotli

Usage

flatten

from dotli import Dotli

data = {
    'a': {
        'c': 'val1',
        'd': 'val2',
    },
    'b': {
        'c': 2,
        'd': {'key3': 'val3', 'key4': 'val4'},
    }
}

d = Dotli()                 # create an obj with a default configuration
flat = d.flatten(data)      # flatten
orig = d.unflatten(flat)    # unflatten
assert data == orig
print(flat)
{
  'a.c': 'val1',
  'a.d': 'val2',
  'b.c': 2,
  'b.d.key3': 'val3',
  'b.d.key4': 'val4',
}

The separator can be configured

data = {
    'a': {'c': 'd'},
    'b': {'e': 'f'}
}

d = Dotli(separator='-')
print(d.flatten(data))
{
  'a-c': 'd',
  'b-e': 'f',
}

It is also possible to flatten lists and a mixture of lists and dicts

data = {
    'a': {
        'c': [1, 2, 3],
        'd': ['e1', 'e2', 'e3'],
    },
    'b': 'h'
}

d = Dotli()
print(d.flatten(data))
{
  'a.c.0': 1,
  'a.c.1': 2,
  'a.c.2': 3,
  'a.d.0': 'e1',
  'a.d.1': 'e2',
  'a.d.2': 'e3',
  'b': 'h',
}

List indices can be wrapped in square brackets to allow numerical strings in dicts as keys

data = {
    'a': {
        '1': [1, 2, 3],
        '2': ['e1', 'e2', 'e3'],
    },
    'b': 'h'
}

d = Dotli(list_brackets=True)
flat = d.flatten(data)
orig = d.unflatten(flat)
assert data == orig
print(flat)
{
  'a.1.[0]': 1,
  'a.1.[1]': 2,
  'a.1.[2]': 3,
  'a.2.[0]': 'e1',
  'a.2.[1]': 'e2',
  'a.2.[2]': 'e3',
  'b': 'h',
}

There will be a nice error message if the dict can not be flattened including the path to the invalid element.

from dotli.errors import SeparatorInKeyError

data = {
    'a': {
        'b.b': 1,
    },
    'b': 'h'
}
try:
    Dotli().flatten(data)
except SeparatorInKeyError as e:
    print(e)
Separator "." is in key "b.b"! @ root.a

unflatten

When elements are missing in a list Dotli will throw an error

from dotli.errors import IncompleteListError

data = {
    'a.0': 0,
    'a.2': 2,
}
try:
    d = Dotli()
    d.unflatten(data)
except IncompleteListError as e:
    print(e)
No entry for index "1" in list! @ a

However it is possible to specify a fill value which will automatically be inserted into the list for missing entries

data = {
    'a.0': 0,
    'a.2': 2,
}

d = Dotli(fill_value_list=None)
print(d.unflatten(data))
{
  'a': [0, None, 2],
}

Metadata

Release files for dotli 1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dotli 1.1
File Size Uploaded
dotli-1.1.tar.gz 5.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dotli 1.1
File Interpreter ABI Platform
dotli-1.1-py3-none-any.whl Python 3 none any Details

Total release size: 13.2 kB

Release files / dotli-1.1.tar.gz

Download URL dotli-1.1.tar.gz
Size 5.0 kB
Tags Source
SHA-256 checksum
How to use checksums
0491bac4aa428a8ee611adb9cbf8a3358e21213de1e6231b5048beefdb726113
BLAKE2b-256 checksum
How to use checksums
a450a6159e01f605228cb7c649c3af5c7ae3ae8090663a5b587b4d1e5bfcffa5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.4

Release files / dotli-1.1-py3-none-any.whl

Download URL dotli-1.1-py3-none-any.whl
Size 8.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e029fba79d0550916d64ca923a5f83cf52ee96a428ed378a66756b07c6532dfb
BLAKE2b-256 checksum
How to use checksums
d1e6932a8b420ab454c3722af7de98f6704aba9e3236090f9ef36ed05c22d1bf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.4

Release history Release notifications | RSS feed

This release

1.1 This release

2 release files

1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page