hbutils.collection.sequence
Collection utility module providing functions for sequence manipulation and grouping operations.
This module offers utilities for working with collections, including: - Removing duplicates while preserving order - Grouping elements by custom criteria with optional post-processing
The functions are designed to be type-safe and work with various sequence types.
unique
- hbutils.collection.sequence.unique(s: Sequence[_ElementType]) Sequence[_ElementType][source]
Unique all the values in the given
s, preserving its original order.- Parameters:
s (Union[Sequence[_ElementType]]) – Original sequence.
- Returns:
Unique sequence, with the original type.
- Return type:
Sequence[_ElementType]
- Examples::
>>> from hbutils.collection import unique >>> >>> unique([1, 2, 3, 1]) [1, 2, 3] >>> unique(('a', 'b', 'a', 'c', 'd', 'e', 'b')) ('a', 'b', 'c', 'd', 'e') >>> unique([3, 1, 2, 1, 4, 3]) [3, 1, 2, 4]
group_by
- hbutils.collection.sequence.group_by(s: Iterable[_ElementType], key: Callable[[_ElementType], _GroupType], gfunc: Callable[[List[_ElementType]], _ResultType] | None = None) Dict[_GroupType, _ResultType][source]
Divide the elements into groups.
- Parameters:
s (Iterable[_ElementType]) – Elements to be grouped.
key (Callable[[_ElementType], _GroupType]) – Group key, should be a callable object that extracts the grouping key from each element.
gfunc (Optional[Callable[[List[_ElementType]], _ResultType]]) – Post-process function for groups, should be a callable object. Default is
Nonewhich means no post-processing will be performed and raw lists will be returned.
- Returns:
Grouping result as a dictionary mapping group keys to processed group values.
- Return type:
Dict[_GroupType, _ResultType]
- Examples::
>>> from hbutils.collection import group_by >>> >>> foods = [ ... 'apple', 'orange', 'pear', ... 'banana', 'fish', 'pork', 'milk', ... ] >>> group_by(foods, len) # group by length {5: ['apple'], 6: ['orange', 'banana'], 4: ['pear', 'fish', 'pork', 'milk']} >>> group_by(foods, len, len) # group and get length {5: 1, 6: 2, 4: 4} >>> group_by(foods, lambda x: x[0]) # group by first letter {'a': ['apple'], 'o': ['orange'], 'p': ['pear', 'pork'], 'b': ['banana'], 'f': ['fish'], 'm': ['milk']} >>> group_by(foods, lambda x: x[0], len) # group and get length {'a': 1, 'o': 1, 'p': 2, 'b': 1, 'f': 1, 'm': 1}