Skip to main content

A flexible utility for flattening dict-like objects in Python.

Project description

Please visit the GitHub repository for more information.

flatten-dict

A flexible utility for flattening dict-like objects in Python.

Introduction

This Python package provide a function flatten() for flattening dict-like objects. It also provides some key joining methods (reducer), and you can choose the reducer you want or even implement your own reducer. You can also choose to invert the resulting flat dict.

Documentation

def flatten(d, reducer='tuple', inverse=False):
    """Flatten dict-like object.

    Parameters
    ----------
    d: dict-like object
        The dict that will be flattened.
    reducer: {'tuple', 'path', function} (default: 'tuple')
        The key joining method. If a function is given, the function will be
        used to reduce.
        'tuple': The resulting key will be tuple of the original keys
        'path': Use ``os.path.join`` to join keys.
    inverse: bool (default: False)
        Whether you want invert the resulting key and value.

    Returns
    -------
    flat_dict: dict
    """

Examples

In [1]: from flatten_dict import flatten

In [2]: normal_dict = {
   ...:     'a': '0',
   ...:     'b': {
   ...:         'a': '1.0',
   ...:         'b': '1.1',
   ...:     },
   ...:     'c': {
   ...:         'a': '2.0',
   ...:         'b': {
   ...:             'a': '2.1.0',
   ...:             'b': '2.1.1',
   ...:         },
   ...:     },
   ...: }

In [3]: flatten(normal_dict)
Out[3]:
{('a',): '0',
 ('b', 'a'): '1.0',
 ('b', 'b'): '1.1',
 ('c', 'a'): '2.0',
 ('c', 'b', 'a'): '2.1.0',
 ('c', 'b', 'b'): '2.1.1'}

In [4]: flatten(normal_dict, reducer='path')
Out[4]:
{'a': '0',
 'b/a': '1.0',
 'b/b': '1.1',
 'c/a': '2.0',
 'c/b/a': '2.1.0',
 'c/b/b': '2.1.1'}

In [5]: flatten(normal_dict, reducer='path', inverse=True)
Out[5]:
{'0': 'a',
 '1.0': 'b/a',
 '1.1': 'b/b',
 '2.0': 'c/a',
 '2.1.0': 'c/b/a',
 '2.1.1': 'c/b/b'}

In [6]: def underscore_reducer(k1, k2):
   ...:     if k1 is None:
   ...:         return k2
   ...:     else:
   ...:         return k1 + "_" + k2
   ...:

In [7]: flatten(normal_dict, reducer=underscore_reducer)
Out[7]:
{'a': '0',
 'b_a': '1.0',
 'b_b': '1.1',
 'c_a': '2.0',
 'c_b_a': '2.1.0',
 'c_b_b': '2.1.1'}

Project details


Release history Release notifications

This version
History Node

0.0.2

History Node

0.0.1

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
flatten_dict-0.0.2-py2.py3-none-any.whl (5.8 kB) Copy SHA256 hash SHA256 Wheel py2.py3 Dec 16, 2016
flatten-dict-0.0.2.tar.gz (3.4 kB) Copy SHA256 hash SHA256 Source None Dec 16, 2016

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page