Skip to main content

A Python library to flatten a dictionary with nested dictionnaries and lists

Reason this release was yanked:

Bad value for special dict keys

Project description

dictflat

A Python library to flatten a dictionary with nested dictionnaries and lists

Use cases

Transform a dictionary structure into a new organization ready to be inserted into a relational database.

Installation

poetry add dictflat

Quick start

>>> from dictflat import DictFlat
>>> import json
>>> r = DictFlat(
    root_key="root"
).flat(
    d={
        "name": "John",
        "pers_id": 12,
        "birth": {
            "address": {
                "street": "123 Main St",
                "city": "Anytown",
                "state": "CA"
            },
            "date": "10/06/1976 01:10:35"
        },
        "Phone_Numbers": [
            {"type": "home", "number": "555-1234"},
            {"type": "work", "number": "555-5678"},
        ],
    }
)
>>> print("%s" % json.dumps(r, indent=2))
{
  "root": [
    {
      "__id": "662783f7-b1a0-4e8c-9de9-f3a72a896d4c",
      "name": "John",
      "pers_id": 12
    }
  ],
  "root.birth": [
    {
      "__id": "e72d549a-89f5-4208-99c0-4ce3493cbf9e",
      "__ref__root": "662783f7-b1a0-4e8c-9de9-f3a72a896d4c",
      "date": "10/06/1976 01:10:35"
    }
  ],
  "root.birth.address": [
    {
      "__id": "cc489c03-82ca-4b6e-a620-32c9c4be236c",
      "__ref__root.birth": "e72d549a-89f5-4208-99c0-4ce3493cbf9e",
      "street": "123 Main St",
      "city": "Anytown",
      "state": "CA"
    }
  ],
  "root.Phone_Numbers": [
    {
      "__id": "ba1560de-9c4c-4886-b4ca-684e0a7e5df0",
      "__ref__root": "662783f7-b1a0-4e8c-9de9-f3a72a896d4c",
      "type": "home",
      "number": "555-1234"
    },
    {
      "__id": "f1032025-6c7d-4341-8e6a-f0dce2374388",
      "__ref__root": "662783f7-b1a0-4e8c-9de9-f3a72a896d4c",
      "type": "work",
      "number": "555-5678"
    }
  ]
}

The result is always a dictionary where each key is a reference to the original dictionary.

  • In this example, the original root document is identified by the token “root” (the root key) and the "address" sub-dictionary is identified by “root.address”.

Each dictionary value is always a list. See below for more examples with more than one element in lists.

Each sub-dictionnary have:

  • an unique field named "__id" (like a primary key)
  • except for root, a "__ref__root" who contains the "__id" value of parent dictionnary;
    • the "root" token in "__ref__root" field name is directly a reference to the global result dictionnary.

Documentation

All examples explained in documentation come from module tests.

  1. Basic usages
  2. Nested dictionnaries
  3. Generate IDs
  4. Change values
  5. Drop fields
  6. Rename fields
  7. Lists
  8. Squash dictionnaries
  9. Simple keys

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

dictflat-0.1.7.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dictflat-0.1.7-py3-none-any.whl (6.3 kB view details)

Uploaded Python 3

File details

Details for the file dictflat-0.1.7.tar.gz.

File metadata

  • Download URL: dictflat-0.1.7.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.13.3 Linux/6.14.11-200.fc41.x86_64

File hashes

Hashes for dictflat-0.1.7.tar.gz
Algorithm Hash digest
SHA256 954cf96dd2fb5c314494a932b50dcccbbd0487535f7ce699b7d1aa91e61b691b
MD5 ba8e1198baae503b43f001500d72564e
BLAKE2b-256 80df6b77a1c3a0701a293eaa5a4b964a1fae8b96ce048a7cee5c9b0cb1d4e0e1

See more details on using hashes here.

File details

Details for the file dictflat-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: dictflat-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 6.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.13.3 Linux/6.14.11-200.fc41.x86_64

File hashes

Hashes for dictflat-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 5523338656f0d5748ff15109066935ff21755c49661483e1a9beaffae1877226
MD5 677cc7d665be5c64e5a89f96771aa1e0
BLAKE2b-256 d92f0cc7e48212de7c42bc5637bea204ee954fe4964e5e1807518adf44cdc6bd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page