Skip to main content

Unflatten dict to dict with nested dict/arrays

Project description

unflatten - convert flat dict to nested dict/array

Latest Version Python versions CI test status Trackgit Views

Description

This package provides a function which can unpack a flat dictionary into a structured dict with nested sub-dicts and/or sub-lists.

Development takes place on github. The package is installable from PyPI.

Synopsis

Nested dicts:

>>> from unflatten import unflatten

>>> unflatten({'foo.bar': 'val'})
{'foo': {'bar': 'val'}}

Nested list:

>>> unflatten({'foo[0]': 'x', 'foo[1]': 'y'})
{'foo': ['x', 'y']}

Nested lists and dicts, intermixed:

>>> unflatten({
...     'foo[0][0]': 'a',
...     'foo[0][1]': 'b',
...     'foo[1].x': 'c',
...      })
{'foo': [['a', 'b'], {'x': 'c'}]}

Notes

Unflatten takes a single argument which should either be a dict (or an object with a dict-like .items() or .iteritems() method) or a sequence of (key, value) pairs. All keys in the dict or sequence must be strings. (Under python 2, keys must be instances of basestring; under python 3, keys just be instances of str.)

Unflatten always returns a dict. By way of example:

>>> unflatten([('[0]', 'x')])
{'': ['x']}

For list-valued nodes, all indexes must be present in the input (flattened) mapping, otherwise a ValueError will be thrown:

>>> unflatten({'a[0]': 'x', 'a[2]': 'y'})
Traceback (most recent call last):
...
ValueError: missing key 'a[1]'

See Also

The morph and flattery packages purport to implement similar functions.

Authors

Jeff Dairiki

History

Release 0.2.0 (2024-09-04)

No substantive code changes from 0.1.1.

Features

  • Added type annotations.

Testing

  • Test under python 3.10, 3.11, and 3.12.

  • Fix tox config to cope with the fact that recent tox/virtualenv does not support EOLed versions of python.

Release 0.1.1 (2021-08-16)

Nits

  • Fix backslashes in docstrings

Packaging

  • PEP517-ize the packaging
  • Use setuptools-scm to maintain version numbers

Testing

  • Test under Python 3.7, 3.8, 3.9 and PyPy 3.7. Drop testing for Python 3.4 & 3.5.
  • Pin pip version for pypy2 (see pip #8653)
  • Clean up and modernize the tox lint and coverage environments

Release 0.1 (2018-01-17)

No code changes.

This package is now deemed "production ready" (though your mileage may vary.)

Release 0.1b1 (2018-01-09)

Initial release.

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

unflatten-0.2.0.tar.gz (7.0 kB view details)

Uploaded Source

Built Distribution

unflatten-0.2.0-py2.py3-none-any.whl (5.2 kB view details)

Uploaded Python 2Python 3

File details

Details for the file unflatten-0.2.0.tar.gz.

File metadata

  • Download URL: unflatten-0.2.0.tar.gz
  • Upload date:
  • Size: 7.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for unflatten-0.2.0.tar.gz
Algorithm Hash digest
SHA256 9710bc558882f697bc36a95a97614be296f07c8f8df1bc2b4ef96c189ce5cf84
MD5 4f9bd0d18ec8ca95155f33f8ebf3e087
BLAKE2b-256 e4d5d2ee1ab7fdbc5af182e853391003c862cde05001810b11057d336436da35

See more details on using hashes here.

File details

Details for the file unflatten-0.2.0-py2.py3-none-any.whl.

File metadata

  • Download URL: unflatten-0.2.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 5.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for unflatten-0.2.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 a0afa7ff22313dcc60ff45110b796ed5b4e908614826e8672a9f76d3a20c1f54
MD5 6add18af899e5f5ce1b60379b5f79d5d
BLAKE2b-256 03899030594c356c6327160d0e9d744fa8deb1de5cdd70b94f272eabcce706fa

See more details on using hashes here.

Supported by

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