tools (common/utils): new OrderedSet class
This commit is contained in:
parent
ca655f01a8
commit
9ba6df5503
1 changed files with 29 additions and 0 deletions
|
|
@ -44,3 +44,32 @@ def recursive_update(ori: dict, update: dict):
|
|||
ori[k] = v
|
||||
return ori
|
||||
|
||||
class OrderedSet(collections.abc.MutableSet):
|
||||
"""A mutable sequence which doesn't keep duplicates"""
|
||||
# TODO: complete missing set methods
|
||||
|
||||
def __init__(self, values=None):
|
||||
self._dict = {}
|
||||
if values is not None:
|
||||
self.update(values)
|
||||
|
||||
def __len__(self):
|
||||
return len(self._dict)
|
||||
|
||||
def __iter__(self):
|
||||
return iter(self._dict.keys())
|
||||
|
||||
def __contains__(self, item):
|
||||
return item in self._dict
|
||||
|
||||
def add(self, item):
|
||||
self._dict[item] = None
|
||||
|
||||
def discard(self, item):
|
||||
try:
|
||||
del self._dict[item]
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
def update(self, items):
|
||||
self._dict.update({i: None for i in items})
|
||||
|
|
|
|||
Loading…
Reference in a new issue