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 details)

Uploaded Source

Built Distribution

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

Uploaded Python 2 Python 3

File details

Details for the file carve-0.2.1.tar.gz.

File metadata

  • Download URL: carve-0.2.1.tar.gz
  • Upload date:
  • Size: 3.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.11.5 CPython/3.7.0 Darwin/17.5.0

File hashes

Hashes for carve-0.2.1.tar.gz
Algorithm Hash digest
SHA256 7fb83859cc1e6f71f132ac402d9ab607d2e3eeb5fb3d0784f4223dfee676dc31
MD5 09ca2d0c29dd5ef97c2fd74e216bc2f4
BLAKE2b-256 c7aeca9022c8fe24636026c4d50113a1aee71d42eaafef8e5fe66a4ad1e5f2e8

See more details on using hashes here.

File details

Details for the file carve-0.2.1-py2.py3-none-any.whl.

File metadata

  • Download URL: carve-0.2.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 4.1 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.11.5 CPython/3.7.0 Darwin/17.5.0

File hashes

Hashes for carve-0.2.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 2eb0302d6871c3ea620528d9325060a70382d4c4c2d1dc0d97e00dc6b655efc8
MD5 4b0987c609f5c97f290b4613ebbb54ba
BLAKE2b-256 67258882529fc892e181b038a257fc1c52dcd9d0e38cf8ae862a6ae691c8ce35

See more details on using hashes here.

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