spekk.trees.core.traverse

Contents

spekk.trees.core.traverse#

spekk.trees.core.traverse(tree: Mapping[Any, Mapping[Any, Tree] | Sequence[Tree] | Any] | Sequence[Mapping[Any, Tree] | Sequence[Tree] | Any] | Any, is_leaf: Callable[[Mapping[Any, Mapping[Any, Tree] | Sequence[Tree] | Any] | Sequence[Mapping[Any, Tree] | Sequence[Tree] | Any] | Any], bool], path: tuple = ()) Generator[TraversalItem, None, None][source]#

Traverse a tree and yield all nodes (subtrees and leaves) as TraversalItem objects. The traversal is depth-first, left-to-right.

>>> tree = {"a": [1, {"b": 2}, 3], "c": 4}
>>> for item in traverse(tree, is_leaf=lambda x: isinstance(x, int)):
...     print(item.value)
1
2
{'b': 2}
3
[1, {'b': 2}, 3]
4
{'a': [1, {'b': 2}, 3], 'c': 4}