carve

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


Keywords
dict, data, nested, functional
License
MIT
Install
pip install carve==0.2.1

Documentation

🌲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.