|
3 | 3 | __all__ = ['defaults', 'copy_func', 'patch_to', 'patch', 'patch_property', 'add_docs', 'docs', 'custom_dir', 'arg0', |
4 | 4 | 'arg1', 'arg2', 'arg3', 'arg4', 'coll_repr', 'is_bool', 'mask2idxs', 'cycle', 'zip_cycle', 'is_indexer', |
5 | 5 | 'negate_func', 'GetAttr', 'delegate_attr', 'bind', 'argwhere', 'map_ex', 'filter_ex', 'range_of', |
6 | | - 'listable_types', 'renumerate', 'first', 'nested_attr', 'stop', 'tst', 'tst2', 'CollBase', 'L', |
| 6 | + 'sorted_ex', 'listable_types', 'renumerate', 'first', 'nested_attr', 'stop', 'tst', 'tst2', 'CollBase', 'L', |
7 | 7 | 'save_config_file', 'read_config_file', 'Config'] |
8 | 8 |
|
9 | 9 | # Cell |
@@ -216,6 +216,14 @@ def range_of(a, b=None, step=None): |
216 | 216 | if is_coll(a): a = len(a) |
217 | 217 | return list(range(a,b,step) if step is not None else range(a,b) if b is not None else range(a)) |
218 | 218 |
|
| 219 | +# Cell |
| 220 | +def sorted_ex(iterable, key=None, reverse=False): |
| 221 | + "Like `sorted`, but if key is str use `attrgetter`; if int use `itemgetter`" |
| 222 | + if isinstance(key,str): k=lambda o:getattr(o,key,0) |
| 223 | + elif isinstance(key,int): k=itemgetter(key) |
| 224 | + else: k=key |
| 225 | + return sorted(iterable, key=k, reverse=reverse) |
| 226 | + |
219 | 227 | # Cell |
220 | 228 | listable_types = typing.Collection,Generator,map,filter,zip |
221 | 229 |
|
|
0 commit comments