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.
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'}]}
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]'
The morph and flattery packages purport to implement similar functions.