stratify_by_parent

stratify_by_parent(items, parent_ids)

Convert flat data to hierarchical tree data via parent-child relationships.

Takes a list of TreeItem objects where parent-child relationships are expressed through a separate list of parent_ids, and returns tree data where the parent-child relationships are expressed through the TreeItem children attribute.

Parameters

items : list[TreeItem]

List of TreeItem objects with empty children lists

parent_ids : list[Optional[str]]

List of parent IDs corresponding to each TreeItem. None indicates a root item. Must be the same length as items list.

Returns

: list[TreeItem]

List of root TreeItem objects with populated children attributes. All original attributes are preserved.

Raises

: ValueError

If items and parent_ids lists have different lengths. If a parent_id references a non-existent item. If circular references are detected.

Examples

from shiny_treeview import TreeItem, stratify_by_parent

# Flat data with parent-child relationships
items = [
    TreeItem(id="root", label="Root"),
    TreeItem(id="child1", label="Child 1"),
    TreeItem(id="child2", label="Child 2"),
    TreeItem(id="grandchild", label="Grandchild")
]
parent_ids = [None, "root", "root", "child1"]

# Convert to hierarchical structure
tree = stratify_by_parent(items, parent_ids)
# Result: root item with child1 and child2 as children,
# and grandchild as a child of child1