# performs customizable level-wise flattening of nested iterables.
## pip install levelflatten
#### Tested against Windows 10 / Python 3.10 / Anaconda
## The level_flatten function provides the following advantages:
### Customizable flattening:
It allows you to control the flattening behavior for different data types.
You can specify how dictionaries should be treated (by items, keys, or values)
and which non-iterable data types should be considered for individual element flattening.
### Level-wise flattening:
It performs flattening in a level-wise manner, allowing you to control the depth of
flattening. You can specify the maximum number of levels to flatten, which provides
flexibility in handling complex nested structures.
### Support for various data types:
It handles various data types such as lists, tuples, sets, dictionaries, strings, bytes,
frozensets, bytearrays, NumPy arrays, and more.
This makes it suitable for working with diverse data structures.
### Maintains order:
The function preserves the order of elements while flattening,
ensuring that the relative order of elements is maintained in the flattened list.
```python
Args:
iterable (iterable): The input iterable to be flattened.
n (int, optional): The maximum number of levels to flatten. Defaults to sys.maxsize.
dict_treatment (str, optional): Treatment for dictionaries. Can be one of "items",
"keys", or "values". Defaults to "items".
consider_non_iter (tuple or list, optional): Tuple or list of data types to be
considered non-iterable and flattened as individual elements. Defaults to
(str, bytes).
Returns:
list: A flattened list containing the elements from the input iterable.
from levelflatten import level_flatten
import numpy as np
from collections import defaultdict
d = defaultdict(list)
d[1].append((1, 2, 3, [44, 5, 5]))
iti = [
{(1, 2), (3, 4)},
["a", 111, 3],
(1, 2),
d,
"stristristri",
range(100, 110),
455j,
b"xxxxaaa",
frozenset({1, 2, 3, 4}),
[
11,
[
222,
33,
4,
(333, 4, {1, 2, 3, 4}, {3333: 333}, [33312, 33323], bytearray(b"xxxxx")),
],
],
[
{2: 3},
(
2,
3,
4,
),
["babab", "dd", {10: 12}, (("bbb", 12), [333, 4, {4: 32}])],
],
(1.2, 11, 1232),
bytearray(b"xxxxx"),
np.array([1, 2, 3, 4, 5]),
[None, np.nan],
[[True, False, True]],
]
t1 = level_flatten(
iti,
n=1,
dict_treatment="items",
consider_non_iter=(str, bytes, frozenset, bytearray),
)
print(t1)
# [(1, 2), (3, 4), 'a', 111, 3, 1, 2, (1, [(1, 2, 3, [44, 5, 5])]), 'stristristri', 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 455j, b'xxxxaaa', frozenset({1, 2, 3, 4}), 11, [222, 33, 4, (333, 4, {1, 2, 3, 4}, {3333: 333}, [33312, 33323], bytearray(b'xxxxx'))], {2: 3}, (2, 3, 4), ['babab', 'dd', {10: 12}, (('bbb', 12), [333, 4, {4: 32}])], 1.2, 11, 1232, bytearray(b'xxxxx'), 1, 2, 3, 4, 5, None, nan, [True, False, True]]
t1 = level_flatten(
iti, n=2, dict_treatment="values", consider_non_iter=(str, bytes, dict)
)
print(t1)
# [1, 2, 3, 4, 'a', 111, 3, 1, 2, (1, 2, 3, [44, 5, 5]), 'stristristri', 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 455j, b'xxxxaaa', 1, 2, 3, 4, 11, 222, 33, 4, (333, 4, {1, 2, 3, 4}, {3333: 333}, [33312, 33323], bytearray(b'xxxxx')), {2: 3}, 2, 3, 4, 'babab', 'dd', {10: 12}, (('bbb', 12), [333, 4, {4: 32}]), 1.2, 11, 1232, 120, 120, 120, 120, 120, 1, 2, 3, 4, 5, None, nan, True, False, True]
t1 = level_flatten(
iti, n=3, dict_treatment="keys", consider_non_iter=(str, bytes, set, tuple)
)
print(t1)
# [{(1, 2), (3, 4)}, 'a', 111, 3, (1, 2), 1, 'stristristri', 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 455j, b'xxxxaaa', 1, 2, 3, 4, 11, 222, 33, 4, (333, 4, {1, 2, 3, 4}, {3333: 333}, [33312, 33323], bytearray(b'xxxxx')), 2, (2, 3, 4), 'babab', 'dd', 10, (('bbb', 12), [333, 4, {4: 32}]), (1.2, 11, 1232), 120, 120, 120, 120, 120, 1, 2, 3, 4, 5, None, nan, True, False, True]
t1 = level_flatten(
iti,
n=4,
dict_treatment="items",
consider_non_iter=(str, bytes, set, tuple, dict, bytearray),
)
print(t1)
# [{(1, 2), (3, 4)}, 'a', 111, 3, (1, 2), (1, [(1, 2, 3, [44, 5, 5])]), 'stristristri', 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 455j, b'xxxxaaa', 1, 2, 3, 4, 11, 222, 33, 4, (333, 4, {1, 2, 3, 4}, {3333: 333}, [33312, 33323], bytearray(b'xxxxx')), {2: 3}, (2, 3, 4), 'babab', 'dd', {10: 12}, (('bbb', 12), [333, 4, {4: 32}]), (1.2, 11, 1232), bytearray(b'xxxxx'), 1, 2, 3, 4, 5, None, nan, True, False, True]
t1 = level_flatten(
iti, n=sys.maxsize, dict_treatment="items", consider_non_iter=(np.array, np.ndarray)
)
print(t1)
# [1, 2, 3, 4, 'a', 111, 3, 1, 2, 1, 1, 2, 3, 44, 5, 5, 's', 't', 'r', 'i', 's', 't', 'r', 'i', 's', 't', 'r', 'i', 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 455j, 120, 120, 120, 120, 97, 97, 97, 1, 2, 3, 4, 11, 222, 33, 4, 333, 4, 1, 2, 3, 4, 3333, 333, 33312, 33323, 120, 120, 120, 120, 120, 2, 3, 2, 3, 4, 'b', 'a', 'b', 'a', 'b', 'd', 'd', 10, 12, 'b', 'b', 'b', 12, 333, 4, 4, 32, 1.2, 11, 1232, 120, 120, 120, 120, 120, array([1, 2, 3, 4, 5]), None, nan, True, False, True]
```
Raw data
{
"_id": null,
"home_page": "https://github.com/hansalemaos/levelflatten",
"name": "levelflatten",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "nested iterables,flatten",
"author": "Johannes Fischer",
"author_email": "aulasparticularesdealemaosp@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/ea/b2/4e0caf9c1941c40b8385cc0f3ff4fc1d79c3131d438cabd0a31d4d922c20/levelflatten-0.10.tar.gz",
"platform": null,
"description": "\r\n# performs customizable level-wise flattening of nested iterables.\r\n\r\n## pip install levelflatten \r\n\r\n#### Tested against Windows 10 / Python 3.10 / Anaconda \r\n\r\n\r\n## The level_flatten function provides the following advantages:\r\n\r\n### Customizable flattening: \r\n\r\nIt allows you to control the flattening behavior for different data types. \r\nYou can specify how dictionaries should be treated (by items, keys, or values) \r\nand which non-iterable data types should be considered for individual element flattening.\r\n\r\n### Level-wise flattening: \r\n\r\nIt performs flattening in a level-wise manner, allowing you to control the depth of \r\nflattening. You can specify the maximum number of levels to flatten, which provides \r\nflexibility in handling complex nested structures.\r\n\r\n### Support for various data types: \r\n\r\nIt handles various data types such as lists, tuples, sets, dictionaries, strings, bytes, \r\nfrozensets, bytearrays, NumPy arrays, and more. \r\nThis makes it suitable for working with diverse data structures.\r\n\r\n### Maintains order: \r\n\r\nThe function preserves the order of elements while flattening, \r\nensuring that the relative order of elements is maintained in the flattened list.\r\n\r\n```python\r\nArgs:\r\n iterable (iterable): The input iterable to be flattened.\r\n n (int, optional): The maximum number of levels to flatten. Defaults to sys.maxsize.\r\n dict_treatment (str, optional): Treatment for dictionaries. Can be one of \"items\",\r\n\t \"keys\", or \"values\". Defaults to \"items\".\r\n consider_non_iter (tuple or list, optional): Tuple or list of data types to be\r\n\t considered non-iterable and flattened as individual elements. Defaults to\r\n\t (str, bytes).\r\n\r\nReturns:\r\n list: A flattened list containing the elements from the input iterable.\r\n \r\n \r\n from levelflatten import level_flatten\r\n import numpy as np\r\n from collections import defaultdict\r\n\r\n d = defaultdict(list)\r\n d[1].append((1, 2, 3, [44, 5, 5]))\r\n iti = [\r\n\t {(1, 2), (3, 4)},\r\n\t [\"a\", 111, 3],\r\n\t (1, 2),\r\n\t d,\r\n\t \"stristristri\",\r\n\t range(100, 110),\r\n\t 455j,\r\n\t b\"xxxxaaa\",\r\n\t frozenset({1, 2, 3, 4}),\r\n\t [\r\n\t\t 11,\r\n\t\t [\r\n\t\t\t 222,\r\n\t\t\t 33,\r\n\t\t\t 4,\r\n\t\t\t (333, 4, {1, 2, 3, 4}, {3333: 333}, [33312, 33323], bytearray(b\"xxxxx\")),\r\n\t\t ],\r\n\t ],\r\n\t [\r\n\t\t {2: 3},\r\n\t\t (\r\n\t\t\t 2,\r\n\t\t\t 3,\r\n\t\t\t 4,\r\n\t\t ),\r\n\t\t [\"babab\", \"dd\", {10: 12}, ((\"bbb\", 12), [333, 4, {4: 32}])],\r\n\t ],\r\n\t (1.2, 11, 1232),\r\n\t bytearray(b\"xxxxx\"),\r\n\t np.array([1, 2, 3, 4, 5]),\r\n\t [None, np.nan],\r\n\t [[True, False, True]],\r\n ]\r\n\r\n t1 = level_flatten(\r\n\t iti,\r\n\t n=1,\r\n\t dict_treatment=\"items\",\r\n\t consider_non_iter=(str, bytes, frozenset, bytearray),\r\n )\r\n print(t1)\r\n # [(1, 2), (3, 4), 'a', 111, 3, 1, 2, (1, [(1, 2, 3, [44, 5, 5])]), 'stristristri', 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 455j, b'xxxxaaa', frozenset({1, 2, 3, 4}), 11, [222, 33, 4, (333, 4, {1, 2, 3, 4}, {3333: 333}, [33312, 33323], bytearray(b'xxxxx'))], {2: 3}, (2, 3, 4), ['babab', 'dd', {10: 12}, (('bbb', 12), [333, 4, {4: 32}])], 1.2, 11, 1232, bytearray(b'xxxxx'), 1, 2, 3, 4, 5, None, nan, [True, False, True]]\r\n\r\n t1 = level_flatten(\r\n\t iti, n=2, dict_treatment=\"values\", consider_non_iter=(str, bytes, dict)\r\n )\r\n print(t1)\r\n # [1, 2, 3, 4, 'a', 111, 3, 1, 2, (1, 2, 3, [44, 5, 5]), 'stristristri', 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 455j, b'xxxxaaa', 1, 2, 3, 4, 11, 222, 33, 4, (333, 4, {1, 2, 3, 4}, {3333: 333}, [33312, 33323], bytearray(b'xxxxx')), {2: 3}, 2, 3, 4, 'babab', 'dd', {10: 12}, (('bbb', 12), [333, 4, {4: 32}]), 1.2, 11, 1232, 120, 120, 120, 120, 120, 1, 2, 3, 4, 5, None, nan, True, False, True]\r\n\r\n\r\n t1 = level_flatten(\r\n\t iti, n=3, dict_treatment=\"keys\", consider_non_iter=(str, bytes, set, tuple)\r\n )\r\n print(t1)\r\n # [{(1, 2), (3, 4)}, 'a', 111, 3, (1, 2), 1, 'stristristri', 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 455j, b'xxxxaaa', 1, 2, 3, 4, 11, 222, 33, 4, (333, 4, {1, 2, 3, 4}, {3333: 333}, [33312, 33323], bytearray(b'xxxxx')), 2, (2, 3, 4), 'babab', 'dd', 10, (('bbb', 12), [333, 4, {4: 32}]), (1.2, 11, 1232), 120, 120, 120, 120, 120, 1, 2, 3, 4, 5, None, nan, True, False, True]\r\n\r\n\r\n t1 = level_flatten(\r\n\t iti,\r\n\t n=4,\r\n\t dict_treatment=\"items\",\r\n\t consider_non_iter=(str, bytes, set, tuple, dict, bytearray),\r\n )\r\n print(t1)\r\n # [{(1, 2), (3, 4)}, 'a', 111, 3, (1, 2), (1, [(1, 2, 3, [44, 5, 5])]), 'stristristri', 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 455j, b'xxxxaaa', 1, 2, 3, 4, 11, 222, 33, 4, (333, 4, {1, 2, 3, 4}, {3333: 333}, [33312, 33323], bytearray(b'xxxxx')), {2: 3}, (2, 3, 4), 'babab', 'dd', {10: 12}, (('bbb', 12), [333, 4, {4: 32}]), (1.2, 11, 1232), bytearray(b'xxxxx'), 1, 2, 3, 4, 5, None, nan, True, False, True]\r\n\r\n\r\n t1 = level_flatten(\r\n\t iti, n=sys.maxsize, dict_treatment=\"items\", consider_non_iter=(np.array, np.ndarray)\r\n )\r\n print(t1)\r\n # [1, 2, 3, 4, 'a', 111, 3, 1, 2, 1, 1, 2, 3, 44, 5, 5, 's', 't', 'r', 'i', 's', 't', 'r', 'i', 's', 't', 'r', 'i', 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 455j, 120, 120, 120, 120, 97, 97, 97, 1, 2, 3, 4, 11, 222, 33, 4, 333, 4, 1, 2, 3, 4, 3333, 333, 33312, 33323, 120, 120, 120, 120, 120, 2, 3, 2, 3, 4, 'b', 'a', 'b', 'a', 'b', 'd', 'd', 10, 12, 'b', 'b', 'b', 12, 333, 4, 4, 32, 1.2, 11, 1232, 120, 120, 120, 120, 120, array([1, 2, 3, 4, 5]), None, nan, True, False, True]\r\n\r\n\r\n```\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "performs customizable level-wise flattening of nested iterables.",
"version": "0.10",
"project_urls": {
"Homepage": "https://github.com/hansalemaos/levelflatten"
},
"split_keywords": [
"nested iterables",
"flatten"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "8be4bd80ce6726f36fdd6cfefb7bfef23b0d1386d698b48078af4d6a8cce87c1",
"md5": "9573ffd271046bff4ff9bb422fb20dc7",
"sha256": "734d4978caaffb34b889c92cdd0601c3c8821ebf9b1ea7011d1c23da7f3ffc05"
},
"downloads": -1,
"filename": "levelflatten-0.10-py3-none-any.whl",
"has_sig": false,
"md5_digest": "9573ffd271046bff4ff9bb422fb20dc7",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 8162,
"upload_time": "2023-07-11T03:55:34",
"upload_time_iso_8601": "2023-07-11T03:55:34.038695Z",
"url": "https://files.pythonhosted.org/packages/8b/e4/bd80ce6726f36fdd6cfefb7bfef23b0d1386d698b48078af4d6a8cce87c1/levelflatten-0.10-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "eab24e0caf9c1941c40b8385cc0f3ff4fc1d79c3131d438cabd0a31d4d922c20",
"md5": "884700de54ce73618f53374ec3e00bf4",
"sha256": "a7f5876e3f3b95be4eed0f6e4d4314e8ff7fbdb6720451e6fb0a1bd017a3a100"
},
"downloads": -1,
"filename": "levelflatten-0.10.tar.gz",
"has_sig": false,
"md5_digest": "884700de54ce73618f53374ec3e00bf4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 6028,
"upload_time": "2023-07-11T03:55:35",
"upload_time_iso_8601": "2023-07-11T03:55:35.835548Z",
"url": "https://files.pythonhosted.org/packages/ea/b2/4e0caf9c1941c40b8385cc0f3ff4fc1d79c3131d438cabd0a31d4d922c20/levelflatten-0.10.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-07-11 03:55:35",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "hansalemaos",
"github_project": "levelflatten",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [],
"lcname": "levelflatten"
}