Skip to content
/ carve Public

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

Notifications You must be signed in to change notification settings

jondot/carve

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published