# Converts a list of tuples to a nested "family tree dict"
## pip install list2tree
#### Tested against Windows 10 / Python 3.10 / Anaconda
```python
from list2tree import treedict,edit_value_in_treedict,get_value_in_treedict
import pprint as pa
pprintx=pa.PrettyPrinter(indent=1,width=1,compact=True)
pprint=pprintx.pprint
nameconnections = [
("Maria", "Anna"),
("Anna", "Joao"),
("Kasimir", "Maria"),
("Hans", "Fritz"),
("Fritz", "Anna"),
("Günther", "Wolfgang"),
("Joao", "Wolfgang"),
]
print("0) --------------------------------------------------------------")
mapped, airvar = treedict(
pairs_list=nameconnections, main_mapping_keys=(), bi_rl_lr="lr"
)
pprint(mapped)
pprint(airvar)
print("1) --------------------------------------------------------------")
mapped, airvar = treedict(
pairs_list=nameconnections, main_mapping_keys=(), bi_rl_lr="rl"
)
pprint(mapped)
pprint(airvar)
print("2) --------------------------------------------------------------")
mapped, airvar = treedict(
pairs_list=nameconnections, main_mapping_keys=(), bi_rl_lr="bi"
)
pprint(mapped)
pprint(airvar)
print("3) --------------------------------------------------------------")
mapped, airvar = treedict(
pairs_list=nameconnections, main_mapping_keys=("Anna", "Günther"), bi_rl_lr="lr"
)
pprint(mapped)
pprint(airvar)
print("4) --------------------------------------------------------------")
mapped, airvar = treedict(
pairs_list=nameconnections, main_mapping_keys=("Anna", "Wolfgang"), bi_rl_lr="rl"
)
pprint(mapped)
pprint(airvar)
print("5) --------------------------------------------------------------")
mapped, airvar = treedict(
pairs_list=nameconnections, main_mapping_keys=("Anna",), bi_rl_lr="bi"
)
pprint(mapped)
pprint(airvar)
print("6) --------------------------------------------------------------")
v1 = get_value_in_treedict(airvar, ("Anna", "Joao", "Wolfgang", "Günther"))
print(v1)
edit_value_in_treedict(
airvar, ("Anna", "Joao", "Wolfgang", "Günther"), "new_value_edit"
)
pprint(airvar)
v2 = get_value_in_treedict(airvar, ("Anna", "Joao", "Wolfgang", "Günther"))
print(v2)
print("7) --------------------------------------------------------------")
0) --------------------------------------------------------------
[(1,
('Wolfgang',)),
(2,
('Günther',
'Wolfgang')),
(3,
('Joao',
'Wolfgang')),
(4,
('Anna',
'Joao',
'Wolfgang')),
(5,
('Fritz',
'Anna',
'Joao',
'Wolfgang')),
(6,
('Maria',
'Anna',
'Joao',
'Wolfgang')),
(7,
('Hans',
'Fritz',
'Anna',
'Joao',
'Wolfgang')),
(8,
('Kasimir',
'Maria',
'Anna',
'Joao',
'Wolfgang'))]
{'Anna': {'Joao': {'Wolfgang': 4}},
'Fritz': {'Anna': {'Joao': {'Wolfgang': 5}}},
'Günther': {'Wolfgang': 2},
'Hans': {'Fritz': {'Anna': {'Joao': {'Wolfgang': 7}}}},
'Joao': {'Wolfgang': 3},
'Kasimir': {'Maria': {'Anna': {'Joao': {'Wolfgang': 8}}}},
'Maria': {'Anna': {'Joao': {'Wolfgang': 6}}},
'Wolfgang': 1}
1) --------------------------------------------------------------
[(1,
('Günther',)),
(2,
('Hans',)),
(3,
('Kasimir',)),
(4,
('Fritz',
'Hans')),
(5,
('Maria',
'Kasimir')),
(6,
('Wolfgang',
'Günther')),
(7,
('Wolfgang',
'Joao',
'Anna',
'Maria',
'Kasimir')),
(8,
('Wolfgang',
'Joao',
'Anna',
'Fritz',
'Hans')),
(9,
('Anna',
'Maria',
'Kasimir')),
(10,
('Anna',
'Fritz',
'Hans')),
(11,
('Joao',
'Anna',
'Maria',
'Kasimir')),
(12,
('Joao',
'Anna',
'Fritz',
'Hans'))]
{'Anna': {'Fritz': {'Hans': 10},
'Maria': {'Kasimir': 9}},
'Fritz': {'Hans': 4},
'Günther': 1,
'Hans': 2,
'Joao': {'Anna': {'Fritz': {'Hans': 12},
'Maria': {'Kasimir': 11}}},
'Kasimir': 3,
'Maria': {'Kasimir': 5},
'Wolfgang': {'Günther': 6,
'Joao': {'Anna': {'Fritz': {'Hans': 8},
'Maria': {'Kasimir': 7}}}}}
2) --------------------------------------------------------------
[(1,
('Anna',
'Joao',
'Wolfgang',
'Günther')),
(2,
('Anna',
'Maria',
'Kasimir')),
(3,
('Anna',
'Fritz',
'Hans')),
(4,
('Fritz',
'Anna',
'Joao',
'Wolfgang',
'Günther')),
(5,
('Fritz',
'Anna',
'Maria',
'Kasimir')),
(6,
('Fritz',
'Hans')),
(7,
('Günther',
'Wolfgang',
'Joao',
'Anna',
'Maria',
'Kasimir')),
(8,
('Günther',
'Wolfgang',
'Joao',
'Anna',
'Fritz',
'Hans')),
(9,
('Hans',
'Fritz',
'Anna',
'Joao',
'Wolfgang',
'Günther')),
(10,
('Hans',
'Fritz',
'Anna',
'Maria',
'Kasimir')),
(11,
('Joao',
'Wolfgang',
'Günther')),
(12,
('Joao',
'Anna',
'Maria',
'Kasimir')),
(13,
('Joao',
'Anna',
'Fritz',
'Hans')),
(14,
('Kasimir',
'Maria',
'Anna',
'Joao',
'Wolfgang',
'Günther')),
(15,
('Kasimir',
'Maria',
'Anna',
'Fritz',
'Hans')),
(16,
('Maria',
'Anna',
'Joao',
'Wolfgang',
'Günther')),
(17,
('Maria',
'Anna',
'Fritz',
'Hans')),
(18,
('Maria',
'Kasimir')),
(19,
('Wolfgang',
'Günther')),
(20,
('Wolfgang',
'Joao',
'Anna',
'Maria',
'Kasimir')),
(21,
('Wolfgang',
'Joao',
'Anna',
'Fritz',
'Hans'))]
{'Anna': {'Fritz': {'Hans': 3},
'Joao': {'Wolfgang': {'Günther': 1}},
'Maria': {'Kasimir': 2}},
'Fritz': {'Anna': {'Joao': {'Wolfgang': {'Günther': 4}},
'Maria': {'Kasimir': 5}},
'Hans': 6},
'Günther': {'Wolfgang': {'Joao': {'Anna': {'Fritz': {'Hans': 8},
'Maria': {'Kasimir': 7}}}}},
'Hans': {'Fritz': {'Anna': {'Joao': {'Wolfgang': {'Günther': 9}},
'Maria': {'Kasimir': 10}}}},
'Joao': {'Anna': {'Fritz': {'Hans': 13},
'Maria': {'Kasimir': 12}},
'Wolfgang': {'Günther': 11}},
'Kasimir': {'Maria': {'Anna': {'Fritz': {'Hans': 15},
'Joao': {'Wolfgang': {'Günther': 14}}}}},
'Maria': {'Anna': {'Fritz': {'Hans': 17},
'Joao': {'Wolfgang': {'Günther': 16}}},
'Kasimir': 18},
'Wolfgang': {'Günther': 19,
'Joao': {'Anna': {'Fritz': {'Hans': 21},
'Maria': {'Kasimir': 20}}}}}
3) --------------------------------------------------------------
[(1,
('Günther',
'Wolfgang')),
(2,
('Anna',
'Joao',
'Wolfgang'))]
{'Anna': {'Joao': {'Wolfgang': 2}},
'Günther': {'Wolfgang': 1}}
4) --------------------------------------------------------------
[(1,
('Wolfgang',
'Günther')),
(2,
('Wolfgang',
'Joao',
'Anna',
'Maria',
'Kasimir')),
(3,
('Wolfgang',
'Joao',
'Anna',
'Fritz',
'Hans')),
(4,
('Anna',
'Maria',
'Kasimir')),
(5,
('Anna',
'Fritz',
'Hans'))]
{'Anna': {'Fritz': {'Hans': 5},
'Maria': {'Kasimir': 4}},
'Wolfgang': {'Günther': 1,
'Joao': {'Anna': {'Fritz': {'Hans': 3},
'Maria': {'Kasimir': 2}}}}}
5) --------------------------------------------------------------
[(1,
('Anna',
'Joao',
'Wolfgang',
'Günther')),
(2,
('Anna',
'Maria',
'Kasimir')),
(3,
('Anna',
'Fritz',
'Hans'))]
{'Anna': {'Fritz': {'Hans': 3},
'Joao': {'Wolfgang': {'Günther': 1}},
'Maria': {'Kasimir': 2}}}
6) --------------------------------------------------------------
1
{'Anna': {'Fritz': {'Hans': 3},
'Joao': {'Wolfgang': {'Günther': 'new_value_edit'}},
'Maria': {'Kasimir': 2}}}
new_value_edit
7) --------------------------------------------------------------
treedict(
pairs_list: list | tuple, main_mapping_keys: tuple | list = (), bi_rl_lr: str = "lr"
):
"""
This function takes a list or tuple of pairs, a tuple or list of main mapping keys, and a string indicating the type
of bidirectional mapping to be used. It returns a tuple of flattened dictionary and a nested dictionary.
:param pairs_list: A list or tuple of pairs.
:type pairs_list: list | tuple
:param main_mapping_keys: A tuple or list of main mapping keys.
:type main_mapping_keys: tuple | list
:param bi_rl_lr: A string indicating the type of bidirectional mapping to be used. Default is "lr", Valid options are
lr - left to right / rl - right to left / bi - bidirectional
:type bi_rl_lr: str
:return: A tuple of flattened dictionary and a nested dictionary.
:rtype: tuple
"""
edit_value_in_treedict(d: dict, keys: list | tuple, newvalue: Any) -> None:
"""
Edit the value of a nested dictionary given a list of keys.
Args:
d (dict): The nested dictionary to be edited.
keys (list,tuple): A list of keys representing the path to the value to be edited.
newvalue (Any): The new value to be assigned to the specified key path.
Returns:
None: This function does not return anything, but it changes the ORIGINAL dict! If you want to keep a copy of
the original dict, use copy.deepcopy(d) before you call the function
Raises:
KeyError: If any of the keys in the list do not exist in the dictionary.
Example:
d = {'a': {'b': {'c': 1}}}
keys = ['a', 'b', 'c']
newvalue = 2
edit_value_in_treedict(d, keys, newvalue)
# d is now {'a': {'b': {'c': 2}}}
"""
get_value_in_treedict(d: dict, keys: list | tuple) -> Any:
"""
Returns the value in a nested dictionary `d` at the specified `keys`.
Args:
d (dict): The nested dictionary to search for the value.
keys (list|tuple): The list or tuple of keys to traverse the nested dictionary.
Returns:
Any: The value at the specified `keys` in the nested dictionary `d`.
Raises:
TypeError: If `d` is not a dictionary or `keys` is not a list or tuple.
KeyError: If any of the keys in `keys` do not exist in the nested dictionary `d`.
"""
```
Raw data
{
"_id": null,
"home_page": "https://github.com/hansalemaos/list2tree",
"name": "list2tree",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "tree,list,recursive,dict,convert,family tree",
"author": "Johannes Fischer",
"author_email": "aulasparticularesdealemaosp@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/58/43/5bad03e51c36cd0a5140eff13c2c3595d3ad11bdff5ba7b4fe39b5e5c748/list2tree-0.10.tar.gz",
"platform": null,
"description": "# Converts a list of tuples to a nested \"family tree dict\" \r\n\r\n## pip install list2tree\r\n\r\n\r\n#### Tested against Windows 10 / Python 3.10 / Anaconda\r\n\r\n\r\n```python\r\nfrom list2tree import treedict,edit_value_in_treedict,get_value_in_treedict\r\nimport pprint as pa\r\npprintx=pa.PrettyPrinter(indent=1,width=1,compact=True)\r\npprint=pprintx.pprint\r\nnameconnections = [\r\n (\"Maria\", \"Anna\"),\r\n (\"Anna\", \"Joao\"),\r\n (\"Kasimir\", \"Maria\"),\r\n (\"Hans\", \"Fritz\"),\r\n (\"Fritz\", \"Anna\"),\r\n (\"G\u00c3\u00bcnther\", \"Wolfgang\"),\r\n (\"Joao\", \"Wolfgang\"),\r\n]\r\nprint(\"0) --------------------------------------------------------------\")\r\nmapped, airvar = treedict(\r\n pairs_list=nameconnections, main_mapping_keys=(), bi_rl_lr=\"lr\"\r\n)\r\npprint(mapped)\r\npprint(airvar)\r\nprint(\"1) --------------------------------------------------------------\")\r\nmapped, airvar = treedict(\r\n pairs_list=nameconnections, main_mapping_keys=(), bi_rl_lr=\"rl\"\r\n)\r\npprint(mapped)\r\npprint(airvar)\r\nprint(\"2) --------------------------------------------------------------\")\r\nmapped, airvar = treedict(\r\n pairs_list=nameconnections, main_mapping_keys=(), bi_rl_lr=\"bi\"\r\n)\r\npprint(mapped)\r\npprint(airvar)\r\nprint(\"3) --------------------------------------------------------------\")\r\nmapped, airvar = treedict(\r\n pairs_list=nameconnections, main_mapping_keys=(\"Anna\", \"G\u00c3\u00bcnther\"), bi_rl_lr=\"lr\"\r\n)\r\npprint(mapped)\r\npprint(airvar)\r\nprint(\"4) --------------------------------------------------------------\")\r\nmapped, airvar = treedict(\r\n pairs_list=nameconnections, main_mapping_keys=(\"Anna\", \"Wolfgang\"), bi_rl_lr=\"rl\"\r\n)\r\npprint(mapped)\r\npprint(airvar)\r\nprint(\"5) --------------------------------------------------------------\")\r\nmapped, airvar = treedict(\r\n pairs_list=nameconnections, main_mapping_keys=(\"Anna\",), bi_rl_lr=\"bi\"\r\n)\r\npprint(mapped)\r\npprint(airvar)\r\nprint(\"6) --------------------------------------------------------------\")\r\nv1 = get_value_in_treedict(airvar, (\"Anna\", \"Joao\", \"Wolfgang\", \"G\u00c3\u00bcnther\"))\r\nprint(v1)\r\nedit_value_in_treedict(\r\n airvar, (\"Anna\", \"Joao\", \"Wolfgang\", \"G\u00c3\u00bcnther\"), \"new_value_edit\"\r\n)\r\npprint(airvar)\r\nv2 = get_value_in_treedict(airvar, (\"Anna\", \"Joao\", \"Wolfgang\", \"G\u00c3\u00bcnther\"))\r\nprint(v2)\r\nprint(\"7) --------------------------------------------------------------\")\r\n0) --------------------------------------------------------------\r\n[(1,\r\n ('Wolfgang',)),\r\n (2,\r\n ('G\u00c3\u00bcnther',\r\n 'Wolfgang')),\r\n (3,\r\n ('Joao',\r\n 'Wolfgang')),\r\n (4,\r\n ('Anna',\r\n 'Joao',\r\n 'Wolfgang')),\r\n (5,\r\n ('Fritz',\r\n 'Anna',\r\n 'Joao',\r\n 'Wolfgang')),\r\n (6,\r\n ('Maria',\r\n 'Anna',\r\n 'Joao',\r\n 'Wolfgang')),\r\n (7,\r\n ('Hans',\r\n 'Fritz',\r\n 'Anna',\r\n 'Joao',\r\n 'Wolfgang')),\r\n (8,\r\n ('Kasimir',\r\n 'Maria',\r\n 'Anna',\r\n 'Joao',\r\n 'Wolfgang'))]\r\n{'Anna': {'Joao': {'Wolfgang': 4}},\r\n 'Fritz': {'Anna': {'Joao': {'Wolfgang': 5}}},\r\n 'G\u00c3\u00bcnther': {'Wolfgang': 2},\r\n 'Hans': {'Fritz': {'Anna': {'Joao': {'Wolfgang': 7}}}},\r\n 'Joao': {'Wolfgang': 3},\r\n 'Kasimir': {'Maria': {'Anna': {'Joao': {'Wolfgang': 8}}}},\r\n 'Maria': {'Anna': {'Joao': {'Wolfgang': 6}}},\r\n 'Wolfgang': 1}\r\n1) --------------------------------------------------------------\r\n[(1,\r\n ('G\u00c3\u00bcnther',)),\r\n (2,\r\n ('Hans',)),\r\n (3,\r\n ('Kasimir',)),\r\n (4,\r\n ('Fritz',\r\n 'Hans')),\r\n (5,\r\n ('Maria',\r\n 'Kasimir')),\r\n (6,\r\n ('Wolfgang',\r\n 'G\u00c3\u00bcnther')),\r\n (7,\r\n ('Wolfgang',\r\n 'Joao',\r\n 'Anna',\r\n 'Maria',\r\n 'Kasimir')),\r\n (8,\r\n ('Wolfgang',\r\n 'Joao',\r\n 'Anna',\r\n 'Fritz',\r\n 'Hans')),\r\n (9,\r\n ('Anna',\r\n 'Maria',\r\n 'Kasimir')),\r\n (10,\r\n ('Anna',\r\n 'Fritz',\r\n 'Hans')),\r\n (11,\r\n ('Joao',\r\n 'Anna',\r\n 'Maria',\r\n 'Kasimir')),\r\n (12,\r\n ('Joao',\r\n 'Anna',\r\n 'Fritz',\r\n 'Hans'))]\r\n{'Anna': {'Fritz': {'Hans': 10},\r\n 'Maria': {'Kasimir': 9}},\r\n 'Fritz': {'Hans': 4},\r\n 'G\u00c3\u00bcnther': 1,\r\n 'Hans': 2,\r\n 'Joao': {'Anna': {'Fritz': {'Hans': 12},\r\n 'Maria': {'Kasimir': 11}}},\r\n 'Kasimir': 3,\r\n 'Maria': {'Kasimir': 5},\r\n 'Wolfgang': {'G\u00c3\u00bcnther': 6,\r\n 'Joao': {'Anna': {'Fritz': {'Hans': 8},\r\n 'Maria': {'Kasimir': 7}}}}}\r\n2) --------------------------------------------------------------\r\n[(1,\r\n ('Anna',\r\n 'Joao',\r\n 'Wolfgang',\r\n 'G\u00c3\u00bcnther')),\r\n (2,\r\n ('Anna',\r\n 'Maria',\r\n 'Kasimir')),\r\n (3,\r\n ('Anna',\r\n 'Fritz',\r\n 'Hans')),\r\n (4,\r\n ('Fritz',\r\n 'Anna',\r\n 'Joao',\r\n 'Wolfgang',\r\n 'G\u00c3\u00bcnther')),\r\n (5,\r\n ('Fritz',\r\n 'Anna',\r\n 'Maria',\r\n 'Kasimir')),\r\n (6,\r\n ('Fritz',\r\n 'Hans')),\r\n (7,\r\n ('G\u00c3\u00bcnther',\r\n 'Wolfgang',\r\n 'Joao',\r\n 'Anna',\r\n 'Maria',\r\n 'Kasimir')),\r\n (8,\r\n ('G\u00c3\u00bcnther',\r\n 'Wolfgang',\r\n 'Joao',\r\n 'Anna',\r\n 'Fritz',\r\n 'Hans')),\r\n (9,\r\n ('Hans',\r\n 'Fritz',\r\n 'Anna',\r\n 'Joao',\r\n 'Wolfgang',\r\n 'G\u00c3\u00bcnther')),\r\n (10,\r\n ('Hans',\r\n 'Fritz',\r\n 'Anna',\r\n 'Maria',\r\n 'Kasimir')),\r\n (11,\r\n ('Joao',\r\n 'Wolfgang',\r\n 'G\u00c3\u00bcnther')),\r\n (12,\r\n ('Joao',\r\n 'Anna',\r\n 'Maria',\r\n 'Kasimir')),\r\n (13,\r\n ('Joao',\r\n 'Anna',\r\n 'Fritz',\r\n 'Hans')),\r\n (14,\r\n ('Kasimir',\r\n 'Maria',\r\n 'Anna',\r\n 'Joao',\r\n 'Wolfgang',\r\n 'G\u00c3\u00bcnther')),\r\n (15,\r\n ('Kasimir',\r\n 'Maria',\r\n 'Anna',\r\n 'Fritz',\r\n 'Hans')),\r\n (16,\r\n ('Maria',\r\n 'Anna',\r\n 'Joao',\r\n 'Wolfgang',\r\n 'G\u00c3\u00bcnther')),\r\n (17,\r\n ('Maria',\r\n 'Anna',\r\n 'Fritz',\r\n 'Hans')),\r\n (18,\r\n ('Maria',\r\n 'Kasimir')),\r\n (19,\r\n ('Wolfgang',\r\n 'G\u00c3\u00bcnther')),\r\n (20,\r\n ('Wolfgang',\r\n 'Joao',\r\n 'Anna',\r\n 'Maria',\r\n 'Kasimir')),\r\n (21,\r\n ('Wolfgang',\r\n 'Joao',\r\n 'Anna',\r\n 'Fritz',\r\n 'Hans'))]\r\n{'Anna': {'Fritz': {'Hans': 3},\r\n 'Joao': {'Wolfgang': {'G\u00c3\u00bcnther': 1}},\r\n 'Maria': {'Kasimir': 2}},\r\n 'Fritz': {'Anna': {'Joao': {'Wolfgang': {'G\u00c3\u00bcnther': 4}},\r\n 'Maria': {'Kasimir': 5}},\r\n 'Hans': 6},\r\n 'G\u00c3\u00bcnther': {'Wolfgang': {'Joao': {'Anna': {'Fritz': {'Hans': 8},\r\n 'Maria': {'Kasimir': 7}}}}},\r\n 'Hans': {'Fritz': {'Anna': {'Joao': {'Wolfgang': {'G\u00c3\u00bcnther': 9}},\r\n 'Maria': {'Kasimir': 10}}}},\r\n 'Joao': {'Anna': {'Fritz': {'Hans': 13},\r\n 'Maria': {'Kasimir': 12}},\r\n 'Wolfgang': {'G\u00c3\u00bcnther': 11}},\r\n 'Kasimir': {'Maria': {'Anna': {'Fritz': {'Hans': 15},\r\n 'Joao': {'Wolfgang': {'G\u00c3\u00bcnther': 14}}}}},\r\n 'Maria': {'Anna': {'Fritz': {'Hans': 17},\r\n 'Joao': {'Wolfgang': {'G\u00c3\u00bcnther': 16}}},\r\n 'Kasimir': 18},\r\n 'Wolfgang': {'G\u00c3\u00bcnther': 19,\r\n 'Joao': {'Anna': {'Fritz': {'Hans': 21},\r\n 'Maria': {'Kasimir': 20}}}}}\r\n3) --------------------------------------------------------------\r\n[(1,\r\n ('G\u00c3\u00bcnther',\r\n 'Wolfgang')),\r\n (2,\r\n ('Anna',\r\n 'Joao',\r\n 'Wolfgang'))]\r\n{'Anna': {'Joao': {'Wolfgang': 2}},\r\n 'G\u00c3\u00bcnther': {'Wolfgang': 1}}\r\n4) --------------------------------------------------------------\r\n[(1,\r\n ('Wolfgang',\r\n 'G\u00c3\u00bcnther')),\r\n (2,\r\n ('Wolfgang',\r\n 'Joao',\r\n 'Anna',\r\n 'Maria',\r\n 'Kasimir')),\r\n (3,\r\n ('Wolfgang',\r\n 'Joao',\r\n 'Anna',\r\n 'Fritz',\r\n 'Hans')),\r\n (4,\r\n ('Anna',\r\n 'Maria',\r\n 'Kasimir')),\r\n (5,\r\n ('Anna',\r\n 'Fritz',\r\n 'Hans'))]\r\n{'Anna': {'Fritz': {'Hans': 5},\r\n 'Maria': {'Kasimir': 4}},\r\n 'Wolfgang': {'G\u00c3\u00bcnther': 1,\r\n 'Joao': {'Anna': {'Fritz': {'Hans': 3},\r\n 'Maria': {'Kasimir': 2}}}}}\r\n5) --------------------------------------------------------------\r\n[(1,\r\n ('Anna',\r\n 'Joao',\r\n 'Wolfgang',\r\n 'G\u00c3\u00bcnther')),\r\n (2,\r\n ('Anna',\r\n 'Maria',\r\n 'Kasimir')),\r\n (3,\r\n ('Anna',\r\n 'Fritz',\r\n 'Hans'))]\r\n{'Anna': {'Fritz': {'Hans': 3},\r\n 'Joao': {'Wolfgang': {'G\u00c3\u00bcnther': 1}},\r\n 'Maria': {'Kasimir': 2}}}\r\n6) --------------------------------------------------------------\r\n1\r\n{'Anna': {'Fritz': {'Hans': 3},\r\n 'Joao': {'Wolfgang': {'G\u00c3\u00bcnther': 'new_value_edit'}},\r\n 'Maria': {'Kasimir': 2}}}\r\nnew_value_edit\r\n7) --------------------------------------------------------------\r\n\r\n\r\n\r\n\r\ntreedict(\r\n pairs_list: list | tuple, main_mapping_keys: tuple | list = (), bi_rl_lr: str = \"lr\"\r\n):\r\n \"\"\"\r\n This function takes a list or tuple of pairs, a tuple or list of main mapping keys, and a string indicating the type\r\n of bidirectional mapping to be used. It returns a tuple of flattened dictionary and a nested dictionary.\r\n\r\n :param pairs_list: A list or tuple of pairs.\r\n :type pairs_list: list | tuple\r\n :param main_mapping_keys: A tuple or list of main mapping keys.\r\n :type main_mapping_keys: tuple | list\r\n :param bi_rl_lr: A string indicating the type of bidirectional mapping to be used. Default is \"lr\", Valid options are\r\n lr - left to right / rl - right to left / bi - bidirectional\r\n :type bi_rl_lr: str\r\n :return: A tuple of flattened dictionary and a nested dictionary.\r\n :rtype: tuple\r\n \"\"\"\r\n\t\r\nedit_value_in_treedict(d: dict, keys: list | tuple, newvalue: Any) -> None:\r\n \"\"\"\r\n Edit the value of a nested dictionary given a list of keys.\r\n\r\n Args:\r\n d (dict): The nested dictionary to be edited.\r\n keys (list,tuple): A list of keys representing the path to the value to be edited.\r\n newvalue (Any): The new value to be assigned to the specified key path.\r\n\r\n Returns:\r\n None: This function does not return anything, but it changes the ORIGINAL dict! If you want to keep a copy of\r\n the original dict, use copy.deepcopy(d) before you call the function\r\n\r\n Raises:\r\n KeyError: If any of the keys in the list do not exist in the dictionary.\r\n\r\n Example:\r\n d = {'a': {'b': {'c': 1}}}\r\n keys = ['a', 'b', 'c']\r\n newvalue = 2\r\n edit_value_in_treedict(d, keys, newvalue)\r\n # d is now {'a': {'b': {'c': 2}}}\r\n \"\"\"\t\r\n\t\r\n\t\r\nget_value_in_treedict(d: dict, keys: list | tuple) -> Any:\r\n \"\"\"\r\n Returns the value in a nested dictionary `d` at the specified `keys`.\r\n\r\n Args:\r\n d (dict): The nested dictionary to search for the value.\r\n keys (list|tuple): The list or tuple of keys to traverse the nested dictionary.\r\n\r\n Returns:\r\n Any: The value at the specified `keys` in the nested dictionary `d`.\r\n\r\n Raises:\r\n TypeError: If `d` is not a dictionary or `keys` is not a list or tuple.\r\n KeyError: If any of the keys in `keys` do not exist in the nested dictionary `d`.\r\n \"\"\"\r\n\t\r\n```\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Converts a list of tuples to a nested \"family tree dict",
"version": "0.10",
"split_keywords": [
"tree",
"list",
"recursive",
"dict",
"convert",
"family tree"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "eea2c845e5b62b171bab1fbcc8ffd64f9acd6ae0fe8e26c1ecf67dbee7965d88",
"md5": "48e146e4730ea93a5a7eac980327cf42",
"sha256": "d820de0381e7cc18be168d3fa3d2cd2d0ee8aef1185c7c1f1e468d93685f90e7"
},
"downloads": -1,
"filename": "list2tree-0.10-py3-none-any.whl",
"has_sig": false,
"md5_digest": "48e146e4730ea93a5a7eac980327cf42",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 9523,
"upload_time": "2023-04-20T04:27:22",
"upload_time_iso_8601": "2023-04-20T04:27:22.876970Z",
"url": "https://files.pythonhosted.org/packages/ee/a2/c845e5b62b171bab1fbcc8ffd64f9acd6ae0fe8e26c1ecf67dbee7965d88/list2tree-0.10-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "58435bad03e51c36cd0a5140eff13c2c3595d3ad11bdff5ba7b4fe39b5e5c748",
"md5": "3f4ebf6d782b6c49b693142075bc4c19",
"sha256": "0eabfb47d77e96e24a8bfc444746db935aa550c08b85efd0996dc13606f11b6c"
},
"downloads": -1,
"filename": "list2tree-0.10.tar.gz",
"has_sig": false,
"md5_digest": "3f4ebf6d782b6c49b693142075bc4c19",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 6712,
"upload_time": "2023-04-20T04:27:25",
"upload_time_iso_8601": "2023-04-20T04:27:25.084247Z",
"url": "https://files.pythonhosted.org/packages/58/43/5bad03e51c36cd0a5140eff13c2c3595d3ad11bdff5ba7b4fe39b5e5c748/list2tree-0.10.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-04-20 04:27:25",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "hansalemaos",
"github_project": "list2tree",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [],
"lcname": "list2tree"
}