# Democritus Dicts
[![PyPI](https://img.shields.io/pypi/v/d8s-dicts.svg)](https://pypi.python.org/pypi/d8s-dicts)
[![CI](https://github.com/democritus-project/d8s-dicts/workflows/CI/badge.svg)](https://github.com/democritus-project/d8s-dicts/actions)
[![Lint](https://github.com/democritus-project/d8s-dicts/workflows/Lint/badge.svg)](https://github.com/democritus-project/d8s-dicts/actions)
[![codecov](https://codecov.io/gh/democritus-project/d8s-dicts/branch/main/graph/badge.svg?token=V0WOIXRGMM)](https://codecov.io/gh/democritus-project/d8s-dicts)
[![The Democritus Project uses semver version 2.0.0](https://img.shields.io/badge/-semver%20v2.0.0-22bfda)](https://semver.org/spec/v2.0.0.html)
[![The Democritus Project uses black to format code](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://choosealicense.com/licenses/lgpl-3.0/)
Democritus functions<sup>[1]</sup> for working with Python dictionaries.
[1] Democritus functions are <i>simple, effective, modular, well-tested, and well-documented</i> Python functions.
We use `d8s` (pronounced "dee-eights") as an abbreviation for `democritus` (you can read more about this [here](https://github.com/democritus-project/roadmap#what-is-d8s)).
## Installation
```
pip install d8s-dicts
```
## Usage
You import the library like:
```python
from d8s_dicts import *
```
Once imported, you can use any of the functions listed below.
## Functions
- ```python
def dict_filter_by_values(dictionary: dict, filter_function: Callable) -> dict:
"""."""
```
- ```python
def dict_filter_by_keys(dictionary: dict, filter_function: Callable) -> dict:
"""."""
```
- ```python
def is_dict(possible_dict: Any) -> bool:
"""Return whether or not the possible_dict is a dictionary."""
```
- ```python
def dict_keys(dictionary: dict) -> List[Any]:
"""Get the dictionary's keys (as a list)."""
```
- ```python
def is_valid_dict_key(key: Any) -> bool:
"""Return whether or not a dictionary could have the given key."""
```
- ```python
def dict_values(dictionary: dict) -> List[Any]:
"""Get the dictionary's values (as a list)."""
```
- ```python
def dict_has_value(dictionary: dict, value) -> bool:
"""Return whether or not the dictionary has the given value (without evaluating the value)."""
```
- ```python
def dict_key_types(dictionary: dict) -> list:
"""Return a list with the type of each key in the dictionary."""
```
- ```python
def dict_value_types(dictionary: dict) -> dict:
"""Return a dictionary with the same keys and the type of each value in place of the actual value."""
```
- ```python
def dict_keys_with_value(dictionary: dict, value):
"""Find the key(s) in the dictionary which have the given value."""
```
- ```python
def dict_sort_by_keys(dictionary: dict, **kwargs) -> collections.OrderedDict:
"""Sort the dictionary based on the dictionary's keys."""
```
- ```python
def dict_sort_by_values(dictionary: dict, **kwargs) -> collections.OrderedDict:
"""Sort the dictionary based on the dictionary's values."""
```
- ```python
def dicts_sort_by_value_at_key(dictionaries: List[Dict[Any, Any]], key, **kwargs) -> List[Dict[Any, Any]]:
"""Sort the given dictionaries (we are assuming that we get a list of dictionaries) based on each dictionary's value at the given key."""
```
- ```python
def dict_flip(dictionary: dict, *, flatten_values: bool = False, flip_lists_and_sets: bool = False) -> dict:
"""Flip the dictionary's keys and values; all of the values become keys and keys become values."""
```
- ```python
def dict_delistify_values(dictionary: dict) -> dict:
"""For all values in the given dictionary that are lists whose lengths are one, replace the list of length one with the value in the list."""
```
- ```python
def dict_examples(n: int = 10, **kwargs) -> List[Dict[Any, Any]]:
"""Create n dictionary examples."""
```
- ```python
def dict_add(dictionary: Dict[Any, List[Any]], key: Any, value: Any) -> Dict[Any, List[Any]]:
"""Add the given value to the dictionary at the given key. This function expects that all values of the dictionary parameter are lists."""
```
- ```python
def dicts_diffs(dictionary_a: dict, dictionary_b: dict) -> list:
"""."""
```
- ```python
def dict_copy_value_at_key(dictionary: dict, key: Any, new_key: Any) -> dict:
"""Copy the value at the given key into the new key."""
```
- ```python
def dict_move_value_at_key(dictionary: dict, old_key: Any, new_key: Any) -> dict:
"""Move the given key and its values into the new key."""
```
- ```python
def dict_key_delete(dictionary: dict, key: Any) -> dict:
"""Delete the given key from the given dictionary."""
```
- ```python
def dict_delete_items(dictionary: dict, values_to_delete: List[Any] = None, keys_to_delete: List[Any] = None) -> dict:
"""Delete all items from the dictionary if the item's value is in values_to_delete or the item's key is in keys_to_delete."""
```
- ```python
def dict_delete_empty_values(dictionary: dict) -> dict:
"""Delete all key-values pairs from the dictionary if the value is an empty strings, empty list, zero, False or None."""
```
- ```python
def dict_keys_with_max_value(dictionary: dict) -> List[DictKeyType]:
"""."""
```
- ```python
def dict_keys_with_min_value(dictionary: dict) -> List[DictKeyType]:
"""."""
```
- ```python
def dict_value_with_max_key(dictionary: dict) -> Any:
"""."""
```
- ```python
def dict_value_with_min_key(dictionary: dict) -> Any:
"""."""
```
## Development
๐ If you want to get involved in this project, we have some short, helpful guides below:
- [contribute to this project ๐ฅ][contributing]
- [test it ๐งช][local-dev]
- [lint it ๐งน][local-dev]
- [explore it ๐ญ][local-dev]
If you have any questions or there is anything we did not cover, please raise an issue and we'll be happy to help.
## Credits
This package was created with [Cookiecutter](https://github.com/audreyr/cookiecutter) and Floyd Hightower's [Python project template](https://github.com/fhightower-templates/python-project-template).
[contributing]: https://github.com/democritus-project/.github/blob/main/CONTRIBUTING.md#contributing-a-pr-
[local-dev]: https://github.com/democritus-project/.github/blob/main/CONTRIBUTING.md#local-development-
Raw data
{
"_id": null,
"home_page": "https://github.com/democritus-project/d8s-dicts",
"name": "d8s-dicts",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "democritus,utility,python,python-dictionaries,python-dictionaries-utility",
"author": "Floyd Hightower",
"author_email": "floyd.hightower27@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/94/ab/0ca7a968f18fc3ef3aef7ff6d09367470483c185599e9b31b1fbf5ffde1a/d8s_dicts-0.6.0.tar.gz",
"platform": "",
"description": "# Democritus Dicts\n\n[![PyPI](https://img.shields.io/pypi/v/d8s-dicts.svg)](https://pypi.python.org/pypi/d8s-dicts)\n[![CI](https://github.com/democritus-project/d8s-dicts/workflows/CI/badge.svg)](https://github.com/democritus-project/d8s-dicts/actions)\n[![Lint](https://github.com/democritus-project/d8s-dicts/workflows/Lint/badge.svg)](https://github.com/democritus-project/d8s-dicts/actions)\n[![codecov](https://codecov.io/gh/democritus-project/d8s-dicts/branch/main/graph/badge.svg?token=V0WOIXRGMM)](https://codecov.io/gh/democritus-project/d8s-dicts)\n[![The Democritus Project uses semver version 2.0.0](https://img.shields.io/badge/-semver%20v2.0.0-22bfda)](https://semver.org/spec/v2.0.0.html)\n[![The Democritus Project uses black to format code](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://choosealicense.com/licenses/lgpl-3.0/)\n\nDemocritus functions<sup>[1]</sup> for working with Python dictionaries.\n\n[1] Democritus functions are <i>simple, effective, modular, well-tested, and well-documented</i> Python functions.\n\nWe use `d8s` (pronounced \"dee-eights\") as an abbreviation for `democritus` (you can read more about this [here](https://github.com/democritus-project/roadmap#what-is-d8s)).\n\n## Installation\n\n```\npip install d8s-dicts\n```\n\n## Usage\n\nYou import the library like:\n\n```python\nfrom d8s_dicts import *\n```\n\nOnce imported, you can use any of the functions listed below.\n\n## Functions\n\n - ```python\n def dict_filter_by_values(dictionary: dict, filter_function: Callable) -> dict:\n \"\"\".\"\"\"\n ```\n - ```python\n def dict_filter_by_keys(dictionary: dict, filter_function: Callable) -> dict:\n \"\"\".\"\"\"\n ```\n - ```python\n def is_dict(possible_dict: Any) -> bool:\n \"\"\"Return whether or not the possible_dict is a dictionary.\"\"\"\n ```\n - ```python\n def dict_keys(dictionary: dict) -> List[Any]:\n \"\"\"Get the dictionary's keys (as a list).\"\"\"\n ```\n - ```python\n def is_valid_dict_key(key: Any) -> bool:\n \"\"\"Return whether or not a dictionary could have the given key.\"\"\"\n ```\n - ```python\n def dict_values(dictionary: dict) -> List[Any]:\n \"\"\"Get the dictionary's values (as a list).\"\"\"\n ```\n - ```python\n def dict_has_value(dictionary: dict, value) -> bool:\n \"\"\"Return whether or not the dictionary has the given value (without evaluating the value).\"\"\"\n ```\n - ```python\n def dict_key_types(dictionary: dict) -> list:\n \"\"\"Return a list with the type of each key in the dictionary.\"\"\"\n ```\n - ```python\n def dict_value_types(dictionary: dict) -> dict:\n \"\"\"Return a dictionary with the same keys and the type of each value in place of the actual value.\"\"\"\n ```\n - ```python\n def dict_keys_with_value(dictionary: dict, value):\n \"\"\"Find the key(s) in the dictionary which have the given value.\"\"\"\n ```\n - ```python\n def dict_sort_by_keys(dictionary: dict, **kwargs) -> collections.OrderedDict:\n \"\"\"Sort the dictionary based on the dictionary's keys.\"\"\"\n ```\n - ```python\n def dict_sort_by_values(dictionary: dict, **kwargs) -> collections.OrderedDict:\n \"\"\"Sort the dictionary based on the dictionary's values.\"\"\"\n ```\n - ```python\n def dicts_sort_by_value_at_key(dictionaries: List[Dict[Any, Any]], key, **kwargs) -> List[Dict[Any, Any]]:\n \"\"\"Sort the given dictionaries (we are assuming that we get a list of dictionaries) based on each dictionary's value at the given key.\"\"\"\n ```\n - ```python\n def dict_flip(dictionary: dict, *, flatten_values: bool = False, flip_lists_and_sets: bool = False) -> dict:\n \"\"\"Flip the dictionary's keys and values; all of the values become keys and keys become values.\"\"\"\n ```\n - ```python\n def dict_delistify_values(dictionary: dict) -> dict:\n \"\"\"For all values in the given dictionary that are lists whose lengths are one, replace the list of length one with the value in the list.\"\"\"\n ```\n - ```python\n def dict_examples(n: int = 10, **kwargs) -> List[Dict[Any, Any]]:\n \"\"\"Create n dictionary examples.\"\"\"\n ```\n - ```python\n def dict_add(dictionary: Dict[Any, List[Any]], key: Any, value: Any) -> Dict[Any, List[Any]]:\n \"\"\"Add the given value to the dictionary at the given key. This function expects that all values of the dictionary parameter are lists.\"\"\"\n ```\n - ```python\n def dicts_diffs(dictionary_a: dict, dictionary_b: dict) -> list:\n \"\"\".\"\"\"\n ```\n - ```python\n def dict_copy_value_at_key(dictionary: dict, key: Any, new_key: Any) -> dict:\n \"\"\"Copy the value at the given key into the new key.\"\"\"\n ```\n - ```python\n def dict_move_value_at_key(dictionary: dict, old_key: Any, new_key: Any) -> dict:\n \"\"\"Move the given key and its values into the new key.\"\"\"\n ```\n - ```python\n def dict_key_delete(dictionary: dict, key: Any) -> dict:\n \"\"\"Delete the given key from the given dictionary.\"\"\"\n ```\n - ```python\n def dict_delete_items(dictionary: dict, values_to_delete: List[Any] = None, keys_to_delete: List[Any] = None) -> dict:\n \"\"\"Delete all items from the dictionary if the item's value is in values_to_delete or the item's key is in keys_to_delete.\"\"\"\n ```\n - ```python\n def dict_delete_empty_values(dictionary: dict) -> dict:\n \"\"\"Delete all key-values pairs from the dictionary if the value is an empty strings, empty list, zero, False or None.\"\"\"\n ```\n - ```python\n def dict_keys_with_max_value(dictionary: dict) -> List[DictKeyType]:\n \"\"\".\"\"\"\n ```\n - ```python\n def dict_keys_with_min_value(dictionary: dict) -> List[DictKeyType]:\n \"\"\".\"\"\"\n ```\n - ```python\n def dict_value_with_max_key(dictionary: dict) -> Any:\n \"\"\".\"\"\"\n ```\n - ```python\n def dict_value_with_min_key(dictionary: dict) -> Any:\n \"\"\".\"\"\"\n ```\n\n## Development\n\n\ud83d\udc4b If you want to get involved in this project, we have some short, helpful guides below:\n\n- [contribute to this project \ud83e\udd47][contributing]\n- [test it \ud83e\uddea][local-dev]\n- [lint it \ud83e\uddf9][local-dev]\n- [explore it \ud83d\udd2d][local-dev]\n\nIf you have any questions or there is anything we did not cover, please raise an issue and we'll be happy to help.\n\n## Credits\n\nThis package was created with [Cookiecutter](https://github.com/audreyr/cookiecutter) and Floyd Hightower's [Python project template](https://github.com/fhightower-templates/python-project-template).\n\n[contributing]: https://github.com/democritus-project/.github/blob/main/CONTRIBUTING.md#contributing-a-pr-\n[local-dev]: https://github.com/democritus-project/.github/blob/main/CONTRIBUTING.md#local-development-\n\n\n",
"bugtrack_url": null,
"license": "GNU Lesser General Public License v3",
"summary": "Democritus functions for working with Python dictionaries.",
"version": "0.6.0",
"project_urls": {
"Homepage": "https://github.com/democritus-project/d8s-dicts"
},
"split_keywords": [
"democritus",
"utility",
"python",
"python-dictionaries",
"python-dictionaries-utility"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "4460c02a1419fb4d2545522649532aad79d79c61487e9a650044b91505ad76e1",
"md5": "3c9649ef3d8d6b2c0f5daa8b02f550aa",
"sha256": "54906ef88b5a2bc145a30f4317e8eca8b5b3182ec449562be83a347311c9572a"
},
"downloads": -1,
"filename": "d8s_dicts-0.6.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "3c9649ef3d8d6b2c0f5daa8b02f550aa",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 24562,
"upload_time": "2021-05-07T10:53:11",
"upload_time_iso_8601": "2021-05-07T10:53:11.642940Z",
"url": "https://files.pythonhosted.org/packages/44/60/c02a1419fb4d2545522649532aad79d79c61487e9a650044b91505ad76e1/d8s_dicts-0.6.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "94ab0ca7a968f18fc3ef3aef7ff6d09367470483c185599e9b31b1fbf5ffde1a",
"md5": "1f88d56638a594863841784b5b9ca446",
"sha256": "7d70da66350a4d24451c74b062c2017743b34c06df6ef50050dab7d64b6a46c6"
},
"downloads": -1,
"filename": "d8s_dicts-0.6.0.tar.gz",
"has_sig": false,
"md5_digest": "1f88d56638a594863841784b5b9ca446",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 29245,
"upload_time": "2021-05-07T10:53:13",
"upload_time_iso_8601": "2021-05-07T10:53:13.786069Z",
"url": "https://files.pythonhosted.org/packages/94/ab/0ca7a968f18fc3ef3aef7ff6d09367470483c185599e9b31b1fbf5ffde1a/d8s_dicts-0.6.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2021-05-07 10:53:13",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "democritus-project",
"github_project": "d8s-dicts",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"requirements": [
{
"name": "d8s-hypothesis",
"specs": [
[
"==",
"0.*"
]
]
},
{
"name": "dictdiffer",
"specs": []
},
{
"name": "hypothesis",
"specs": []
},
{
"name": "importlib-metadata",
"specs": []
},
{
"name": "more-itertools",
"specs": []
}
],
"lcname": "d8s-dicts"
}