Skip to main content

A minimalist Python library for manipulating nested data structures with ease and performance.

Project description

🌲Carve

A minimalist Python library for manipulating nested data structures with ease and performance.

Take a look:

>>> from carve import treemap
>>> obj = {"john": {"doe": [{"puma": "yes", "adidas": None}]}}
>>> treemap(obj, remove_empty)
{"john": {"doe": [{"puma": "yes"}]}}
>>> treemap(obj, lambda k,v,p: ("PUMA", "puma") if k == "puma" else (k,v))
{"john": {"doe": [{"PUMA": "puma", "adidas": None}]}}

Quick Start

Install using pip/pipenv/etc. (we recommend poetry for sane dependency management):

$ poetry add carve

Transform your dictionary using a k,v,p context for each operation:

  • k - key.
  • v - value.
  • p - path, in the form of a tuple: ("john", "doe") means the nested key "john.doe".

And return a key-value tuple: (key, value). You can:

  • Return a custom value to change both key and value ("foo", "bar")
  • Just modify a key: ("foo", v)
  • Just modify a value: (k, "bar")
  • Remove the current entry: (None, None)
  • Decide what to do based on your current path: (None, None) if "secret" in p else (k,v)

Builtins

You can use the following builtins for shortcut operations:

from carve import treemap, mapkey, mapval, remove, on_key, remove_empty, flow

treemap(target, remove(lambda k, v, p: k == "adidas"))
treemap(target, mapval(lambda k, v, p: "X" if len(p) > 2 else v))
treemap(target, mapkey(lambda k, v, p: "X" + v if len(p) > 2 else k))
treemap(target, on_key("puma", lambda k, v, p: (k, "X")))
treemap(target, remove_empty)

# multiple builtins, left-to-right with 'flow'
assert treemap(target, flow(scream, remove_empty))

Thanks:

To all Contributors - you make this happen, thanks!

Copyright

Copyright (c) 2018 @jondot. See LICENSE for further details.

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

carve-0.2.1.tar.gz (3.0 kB view hashes)

Uploaded Source

Built Distribution

carve-0.2.1-py2.py3-none-any.whl (4.1 kB view hashes)

Uploaded Python 2 Python 3

Supported by

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