{"id":34115065,"url":"https://github.com/biface/ndt","last_synced_at":"2026-04-05T12:01:43.961Z","repository":{"id":248279205,"uuid":"828256416","full_name":"biface/ndt","owner":"biface","description":"A python nested dictionaries implementation.","archived":false,"fork":false,"pushed_at":"2026-04-04T13:05:17.000Z","size":392,"stargazers_count":0,"open_issues_count":36,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-04T14:42:25.117Z","etag":null,"topics":["dictionaries","nesting","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/biface.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.fr.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-07-13T15:26:34.000Z","updated_at":"2026-03-26T07:24:40.000Z","dependencies_parsed_at":"2025-07-19T17:07:06.773Z","dependency_job_id":"0a41fb72-6154-447a-bdab-62a205856b10","html_url":"https://github.com/biface/ndt","commit_stats":null,"previous_names":["biface/ndt"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/biface/ndt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biface%2Fndt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biface%2Fndt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biface%2Fndt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biface%2Fndt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/biface","download_url":"https://codeload.github.com/biface/ndt/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/biface%2Fndt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31434624,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T08:13:15.228Z","status":"ssl_error","status_checked_at":"2026-04-05T08:13:11.839Z","response_time":75,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dictionaries","nesting","python3"],"created_at":"2025-12-14T19:50:35.062Z","updated_at":"2026-04-05T12:01:43.954Z","avatar_url":"https://github.com/biface.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Python](https://img.shields.io/badge/Language-python-green.svg)\n![PyPI - Status](https://img.shields.io/pypi/status/ndict-tools)\n![PyPI - License](https://img.shields.io/pypi/l/ndict-tools)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ndict-tools)\n![Read the Docs](https://img.shields.io/readthedocs/ndict-tools)\n![Test](https://github.com/biface/ndt/actions/workflows/python-ci-tests.yaml/badge.svg?branch=master)\n![Codecov](https://img.shields.io/codecov/c/github/biface/ndt)\n![GitHub Release](https://img.shields.io/github/v/release/biface/ndt)\n![PyPI - Version](https://img.shields.io/pypi/v/ndict-tools)\n\n--------------\n# Lecteur francophone\n\nEn Python standard, il est possible d'avoir des dictionnaires à l'intérieur d'autres dictionnaires, créant ainsi des\nstructures de données imbriquées. Cependant, bien que cette fonctionnalité existe, Python ne propose pas de moyens\nnatifs pour rechercher facilement ou gérer les clés et valeurs dans des dictionnaires imbriqués complexes.\n\nMes recherches et tests sur des bibliothèques dédiées à la gestion des dictionnaires imbriqués m'ont conduit à\nplusieurs solutions, mais aucune n'a pleinement répondu à mes attentes. Le module qui s'en rapproche le plus est celui \ndatant de 2015, [disponible sur PyPI](https://pypi.org/project/nested_dict/), mais il n'offre pas une architecture \ncomplète pour gérer les \"objets de dictionnaires imbriqués\" de manière fluide et robuste.\n\nCela m'a donc poussé à redévelopper un tel module, offrant une gestion plus complète et intuitive des dictionnaires \nimbriqués. Ce module facilite la manipulation, la recherche, et la gestion des clés et valeurs dans des structures \nde données plus complexes, en offrant des outils dédiés à cette tâche spécifique.\n\n## Qu'est-ce qu'un dictionnaire imbriqué ?\n\nUn dictionnaire imbriqué est simplement un dictionnaire dont les valeurs peuvent elles-mêmes être des dictionnaires.\nCela permet de créer des structures de données plus riches et hiérarchiques, où chaque \"nœud\" de la structure peut \ncontenir des informations supplémentaires sous forme de dictionnaires, permettant ainsi de modéliser des données \ncomplexes de manière organisée et accessible.\n\n## Utilisation des clés imbriquées et gestion des hiérarchies dans les dictionnaires\n\n### Clés de différents types et utilisation des listes pour gérer la hiérarchie\n\nComme pour les dictionnaires classiques en Python, les clés dans un dictionnaire imbriqué doivent être **hashables**.\nCela signifie que vous pouvez utiliser des types comme **nombres**, **chaînes de caractères**, ou **tuples** comme clés.\nCependant, les **listes** ne sont pas hashables et ne peuvent pas être utilisées directement comme clés.\n\n### Accès aux valeurs imbriquées\n\nLes dictionnaires imbriqués vous permettent de structurer vos données en plusieurs niveaux. Par exemple, pour accéder à\nune valeur dans un dictionnaire imbriqué, vous pouvez utiliser une séquence de clés qui représentera chaque niveau de\nla hiérarchie.\n\nPar le biais des listes simples et non imbriquées, nous représentons cette hiérarchie d'imbrication. \n\n#### Exemple d'accès imbriqué\n\nLes deux expressions suivantes sont **équivalentes** pour accéder à une valeur dans un dictionnaire imbriqué :\n\n```dictionnaire[[1, \"a\", (2, 3)]]``` est equivalent à ```dictionnaire[1][\"a\"][(2, 3)]```\n\n# English reader and ROW\n\nIn standard Python, dictionaries within dictionaries are possible, creating nested data structures. However, while this\nfunctionality exists, Python does not offer native features to easily search and manage keys and values within complex\nnested dictionaries.\n\nMy research and testing of libraries dedicated to managing nested dictionaries led me to several solutions, but none\nfully met my expectations. The module I found that came closest was one from 2015, [available on\nPyPI](https://pypi.org/project/nested_dict/), but it does not provide a complete architecture for managing\n\"nested dictionary objects\" in a smooth and robust way. This motivated me to redevelop such a module, offering a more\ncomplete and intuitive way to handle nested dictionaries. This new module makes it easier to manipulate, search, and \nmanage keys and values in complex data structures by providing tools dedicated to this specific task.\n\n## What is a Nested Dictionary?\n\nA nested dictionary is simply a dictionary where the values themselves are dictionaries. This allows for the creation\nof richer, hierarchical data structures where each \"node\" in the structure can hold additional information in the form\nof dictionaries, making it easier to model complex data in an organized and accessible way.\n\n## Using Nested Keys and Managing Hierarchies in Dictionaries\n\n### Keys of Different Types and Using Lists for Hierarchical Keys\n\nJust like with standard dictionaries in Python, the keys in a nested dictionary must be **hashable**. This means you \ncan use types such as **numbers**, **strings**, or even **tuples** as keys. However, **lists** are not hashable and\ncannot be used directly as keys.\n\n### Accessing Nested Values\n\nNested dictionaries allow you to structure your data over multiple levels. For example, to access a value in a nested\ndictionary, you can use a sequence of keys that represents each level of the hierarchy.\n\nUsing simple non nested lists is the way used to represents nested keys.\n\n#### Nested Access Example\n\nThe following two expressions are **equivalent** for accessing a value in a nested dictionary:\n\n```dict[[1, \"a\", (2, 3)]]``` is equivalent to ```dict[1][\"a\"][(2, 3)]```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbiface%2Fndt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbiface%2Fndt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbiface%2Fndt/lists"}