Skip to main content

No project description provided

Project description

Tabular Dict

A Python3 library to flatten and inflate lists and dictionaries:

For example, flattening something like this:

from tabular_dict import flatten

flatten({
    'some_key': {
        'foo': 'bar',
    },
    'WithA.Dot': [True, None],
})

will render you a flat tabular structure like this:

{
    'some_key.foo': 'bar',
    'WithA\\.Dot.[0]': True,
    'WithA\\.Dot.[1]': None
}

which can be inflated to the original without loss like this:

from tabular_dict import inflate

inflate({
    'some_key.foo': 'bar',
    'WithA\\.Dot.[0]': True,
    'WithA\\.Dot.[1]': None
})

How to install

Documentation

flatten(data, separator = '.', escape = escape_type.SLASH, mark_arrays = True)

Flattens a dict or list into a single-dimension dict, with a path value mapping. Paths are joined consecutive keys bound by a pre-defined separator. Arrays are specially marked with square brackets.

Only valid JSON dictionaries and lists are accepted (for example, dict keys must always be strings)

Arguments

  • data: Union[dict, list] - Dictionary or list to be flattened
  • separator: str = '.' - Separator to be added between different levels on the data, defaults to a dot
  • separator: escape_type = escape_type.SLASH - Type of escaping, defaults to SLASH. Currently only SLASH and NO_ESCAPE are supported
  • mark_arrays: bool = True - If set to True, will mark array index keys with a bracket.

Return value

A dict with the flattened structure.

Examples

from tabular_dict import flatten

flatten({
    'a': {'b': {'c': {'d': 'e'}}},
    'b': [[[[{'foo': 'bar'}]]]],
})

Output:

{
    'a.b.c.d': 'e',
    'b.[0].[0].[0].[0].foo': 'bar',
}

inflate(data, separator = '.', escape = escape_type.SLASH, mark_arrays = True)

Only valid JSON dictionaries and lists are accepted (for example, dict keys must always be strings)

Arguments

  • flat_data: dict - Flat dictionary, with keys as strings and values as primitives (int, str, None, bool, float)
  • separator: str = '.' - Separator that delimits different levels on the data, defaults to a dot
  • separator: escape_type = escape_type.SLASH - Type of escaping, defaults to SLASH. Currently only SLASH and NO_ESCAPE are supported
  • mark_arrays: bool = True - If set to True, will recover array keys when enclosed in brackets.

Return value

A dict or list with the inflated data

Examples

from tabular_dict import inflate

inflate({
    'a.b.c.d': 'e',
    'b.[0].[0].[0].[0].foo': 'bar',
})

# Also works with roots that are lists
inflate({
    '[0].a': 1,
    '[1]': 2,
    '[2].a.b.c.d.e.f.g': 'h',
})

Output:

{
    'a': {'b': {'c': {'d': 'e'}}},
    'b': [[[[{'foo': 'bar'}]]]],
}

# Also works with roots that are lists
[
    {'a': 1},
    2,
    {'a': {'b': {'c': {'d': {'e': {'f': {'g': 'h'}}}}}}},
]

escape_type

:warning: For now, avoid using anything other than SLASH.

There are three accepted escape types:

  • SLASH - Will add a slash before the separator and duplicate slashes. This is the default and suggested type
  • NO_ESCAPE - Skips escaping altogether
  • DOUBLE - Duplicates the separator to escape it (Only partial support for now, avoid this)

Example:

from tabular_dict import escape_type, make_path

# Gives you "\\some\-example"
print(make_path('', '\some-example', separator='-', escape=escape_type.SLASH))

# Gives you "\some-example"
print(make_path('', '\some-example', separator='-', escape=escape_type.NO_ESCAPE))

# Gives you "\some--example"
print(make_path('', '\some--example', separator='-', escape=escape_type.DOUBLE))

make_path(path, key, separator = '.', escape = escape_type.SLASH)

This is mostly an internal function, you will probably not use it.

Concatenates a new key into a path, considering the separator and escape rule.

Arguments

  • path: str - Current path, will concatenate new keys into it. Pass empty string if this is the root.
  • key: str - Separator that delimits different levels on the data, defaults to a dot
  • separator: str = '.' - Separator that delimits different levels on the data, defaults to a dot
  • separator: escape_type = escape_type.SLASH - Type of escaping, defaults to SLASH.

Return value

A string with the concatenated path and key

Examples

from tabular_dict import make_path

# Gives you "key"
print(make_path('', 'key'))

# Gives you "path,key"
print(make_path('path', 'key', separator=','))

# Gives you "a,longer,path,key_with_\,_comma"
print(make_path('a,longer,path', 'key_with_,_comma', separator=','))

split_path(path, key, separator = '.', escape = escape_type.SLASH)

This is mostly an internal function, you will probably not use it.

Concatenates a new key into a path, considering the separator and escape rule.

Arguments

  • path: str - Full path generated by make_path. Will split it into individual keys.
  • separator: str = '.' - Separator that delimits different levels on the data, defaults to a dot
  • separator: escape_type = escape_type.SLASH - Type of escaping, defaults to SLASH.
  • mark_arrays: bool = True - If set to True, will recover array keys when enclosed in brackets.

Return value

A list with the individual keys that make up the path

Examples

from tabular_dict import split_path

# Gives you ["1"]
print(split_path('1'))

# Gives you [1]
print(split_path('[1]'))

# Gives you ["one", "tw,o", "three", 4]
print(split_path('one,tw\\,o,three,[4]', separator=','))

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

tabular_dict-0.0.6.tar.gz (129.2 kB view details)

Uploaded Source

File details

Details for the file tabular_dict-0.0.6.tar.gz.

File metadata

  • Download URL: tabular_dict-0.0.6.tar.gz
  • Upload date:
  • Size: 129.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for tabular_dict-0.0.6.tar.gz
Algorithm Hash digest
SHA256 e87b6650606add0f558f2943644b69a13edecd78f86e7bd9501f0df0a02a357d
MD5 44ac6675e3c4f63b5b079b2cb8e7156d
BLAKE2b-256 c1a5a7b312c008faa3deef2ac2efdf4454a3e7aebb21eba1527864589c928e60

See more details on using hashes here.

Supported by

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