python-benedict/benedict/core/nest.py

21 lines
740 B
Python

from benedict.core.groupby import groupby
def _nest_items(nested_items, item, id_key, children_key):
children_items = nested_items.pop(item[id_key], [])
item[children_key] = children_items
for child_item in children_items:
_nest_items(nested_items, child_item, id_key, children_key)
def nest(items, id_key, parent_id_key, children_key):
if any(
[id_key == parent_id_key, id_key == children_key, parent_id_key == children_key]
):
raise ValueError("keys should be different.")
nested_items = groupby(items, parent_id_key)
root_items = nested_items.get(None, [])
for item in root_items:
_nest_items(nested_items, item, id_key, children_key)
return nested_items.get(None)