Skip to main content

Build Coverage Status PyPI Version PyPI - Python Version License

🪆 Nested Dict Tools

Nested Dict Tools is a Python package that provides utilities for working with nested dictionaries. It includes:

  • Recursive types for describing nested mappings and dictionaries.
  • Fully typed functions to:
    • Flatten and unflatten nested dictionaries.
    • Get and set deeply nested values.
    • Iterate over leaves and the dictionary that contains then.
    • Filter and map functions on leaves.
    • Other helpful functions.
from nested_dict_tools import (
    filter_leaves,
    flatten_dict,
    get_deep,
    is_in_leaves,
    iter_leaf_containers,
    iter_leaves,
    map_leaves,
    set_deep,
    unflatten_dict,
)

nested = {"a": {"b": {"c": 42}}}

# Get a deeply nested value
value = get_deep(nested, ["a", "b"])
print(value)  # Output: {'c': 42}

# Set a deeply nested value
set_deep(nested, ["a", "z"], "new_value")
print(nested)  # Output: {'a': {'b': {'c': 42}, 'z': 'new_value'}}

# Flatten the nested dictionary
flat = flatten_dict(nested, sep=".")
print(flat)  # Output: {'a.b.c': 42, 'a.z': 'new_value'}

# Unflatten the flattened dictionary
unflattened = unflatten_dict(flat, sep=".")
print(unflattened == nested)  # Output: True


# Iterate over leaves
leaves = list(iter_leaves(nested))
print(leaves)  # Output: [42, 'new_value']

# Iterate over leaf containers and keys
leaf_refs = list(iter_leaf_containers(nested))
print(leaf_refs)  # Output: [({'c': 42}, 'c'), ({'b': {'c': 42}, 'z': 'new_value'}, 'z')]

# and mutate leaves in place
d, key = leaf_refs[0]
d[key] = 3
print(nested)  # Output: {'a': {'b': {'c': 3}, 'z': 'new_value'}}


# Check if a values is the leaves
print(is_in_leaves("foo", nested))  # Output: False

# Filter leaves
nested = filter_leaves(
    nested,
    lambda k, v: isinstance(v, int),
)
print(nested)  # Output: {'a': {'b': {'c': 3}}}

# Map on leaves
mapped = map_leaves(lambda x: x + 1, nested)
print(mapped)  # Output: {'a': {'b': {'c': 4}}}

# Map on leaves with several dictionaries
mapped = map_leaves(lambda x, y: x + y + 1, nested, nested)
print(mapped)  # Output: {'a': {'b': {'c': 7}}}


# # Recursive types:
type NestedDict[K, V] = dict[K, NestedDictNode[K, V]]
type NestedDictNode[K, V] = V | NestedDict[K, V]
# Similar types for Mapping and MutableMapping

⬇️ Installation

You can install Nested Dict Tools via pip:

pip install nested-dict-tools

🧾 License

MIT

Metadata

Release files for nested_dict_tools 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nested_dict_tools 0.4.1
File Size Uploaded
nested_dict_tools-0.4.1.tar.gz 77.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nested_dict_tools 0.4.1
File Interpreter ABI Platform
nested_dict_tools-0.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 85.7 kB

Release files / nested_dict_tools-0.4.1.tar.gz

Download URL nested_dict_tools-0.4.1.tar.gz
Size 77.0 kB
Tags Source
SHA-256 checksum
How to use checksums
1f778e9eca2723ee0e7dd5deda7abc855798405e47cf57dba01c501c48004ef6
BLAKE2b-256 checksum
How to use checksums
cd083fcb1da1364d30e068799cfbd982e3590e443cc017c87e17d06c33ba4865
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-httpx/0.28.1

Release files / nested_dict_tools-0.4.1-py3-none-any.whl

Download URL nested_dict_tools-0.4.1-py3-none-any.whl
Size 8.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a3ac64a8e755b878c5e6cf4f527a9cb3a7564568dee166947879e3406ad034bb
BLAKE2b-256 checksum
How to use checksums
95e0a1382ae821e0482270175495a10e5e0112e133f5c825704d9bdac6fad1e1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-httpx/0.28.1

Release history Release notifications | RSS feed

This release

0.4.1 This release

2 release files

0.4.0

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page