forked from biolab/orange3
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcollections.py
More file actions
55 lines (41 loc) · 1.47 KB
/
Copy pathcollections.py
File metadata and controls
55 lines (41 loc) · 1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import re
from typing import List
class frozendict(dict):
def clear(self):
raise AttributeError("FrozenDict does not support method 'clear'")
def pop(self, _k):
raise AttributeError("FrozenDict does not support method 'pop'")
def popitem(self):
raise AttributeError("FrozenDict does not support method 'popitem'")
def setdefault(self, _k, _v):
raise AttributeError("FrozenDict does not support method 'setdefault'")
def update(self, _d):
raise AttributeError("FrozenDict does not support method 'update'")
def __setitem__(self, _key, _value):
raise AttributeError("FrozenDict does not allow setting elements")
def __delitem__(self, _key):
raise AttributeError("FrozenDict does not allow deleting elements")
def natural_sorted(values: List) -> List:
"""
Sort values with natural sort or human order - [sth1, sth2, sth10] or
[1, 2, 10]
Parameters
----------
values
List with values to sort
Returns
-------
List with sorted values
"""
def atoi(text):
return int(text) if text.isdigit() else text
def natural_keys(element):
"""
alist.sort(key=natural_keys) or sorted(alist, key=natural_keys) sorts
in human order
"""
if isinstance(element, (str, bytes)):
return [atoi(c) for c in re.split(r'(\d+)', element)]
else:
return element
return sorted(values, key=natural_keys)