FlatDict

4.1.0 · active · verified Sat Apr 11

FlatDict is a Python module for interacting with nested dictionaries as a single-level dictionary with delimited keys. It provides both `FlatDict` for general nested dictionaries and `FlatterDict` for dictionaries that may contain lists or tuples. The library is actively maintained with regular releases and is currently at version 4.1.0.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates the basic usage of `FlatDict` and `FlatterDict`. It shows how to create flattened dictionaries, access and modify values using delimited keys, add new keys, and convert them back to nested dictionaries. It also illustrates how to correctly retrieve the library version after the removal of the `__version__` attribute in `flatdict` 4.1.0.

import flatdict
import pprint
from importlib.metadata import version

# Get the library version (new way, as __version__ was removed in 4.1.0)
print(f"flatdict version: {version('flatdict')}")

# Example with FlatDict
nested_dict = {
    'user': {
        'name': 'Alice',
        'contact': {'email': 'alice@example.com', 'phone': '123-456-7890'}
    },
    'app_settings': {'theme': 'dark'}
}

flat = flatdict.FlatDict(nested_dict)
print("\nFlatDict example:")
print(f"Original nested dict: {nested_dict}")
print(f"Flat dict representation: {flat}")

# Accessing values with delimited keys
print(f"Accessing 'user:name': {flat['user:name']}")
print(f"Accessing 'user:contact:email': {flat['user:contact:email']}")

# Modifying values
flat['app_settings:theme'] = 'light'
print(f"Modified 'app_settings:theme': {flat['app_settings:theme']}")

# Adding new values
flat['new:key'] = 'new_value'
print(f"Added 'new:key': {flat['new:key']}")

# Converting back to nested dict
print("\nConverted back to nested dict (FlatDict.as_dict()):")
pprint.pprint(flat.as_dict())

# Example with FlatterDict (handles lists/tuples by enumerating elements)
nested_with_list = {
    'items': ['apple', 'banana', {'fruit': 'cherry'}],
    'settings': {'verbose': True}
}
flatter = flatdict.FlatterDict(nested_with_list)
print("\nFlatterDict example:")
print(f"Original nested dict with list: {nested_with_list}")
print(f"Flatter dict representation: {flatter}")

# Accessing list elements using numerical keys
print(f"Accessing 'items:0': {flatter['items:0']}")
print(f"Accessing 'items:2:fruit': {flatter['items:2:fruit']}")

# Converting back to nested dict
print("\nConverted back to nested dict (FlatterDict.as_dict()):")
pprint.pprint(flatter.as_dict())

view raw JSON →