Skip to content

Commit b3d0737

Browse files
committed
Add __delitem__ to sorted dict views
1 parent 1da26b4 commit b3d0737

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

docs/sorteddict.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ SortedKeysView
5757
:show-inheritance:
5858

5959
.. automethod:: __getitem__
60+
.. automethod:: __delitem__
6061

6162

6263
SortedItemsView
@@ -66,6 +67,7 @@ SortedItemsView
6667
:show-inheritance:
6768

6869
.. automethod:: __getitem__
70+
.. automethod:: __delitem__
6971

7072

7173
SortedValuesView
@@ -75,3 +77,4 @@ SortedValuesView
7577
:show-inheritance:
7678

7779
.. automethod:: __getitem__
80+
.. automethod:: __delitem__

sortedcontainers/sorteddict.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,44 @@ def _check(self):
543543
assert all(key in self for key in _list)
544544

545545

546+
def _view_delitem(self, index):
547+
"""Remove item at `index` from sorted dict.
548+
549+
``view.__delitem__(index)`` <==> ``del view[index]``
550+
551+
Support slicing.
552+
553+
Runtime complexity: `O(log(n))` -- approximate.
554+
555+
>>> sd = SortedDict({'a': 1, 'b': 2, 'c': 3})
556+
>>> view = sd.keys()
557+
>>> del view[0]
558+
>>> sd
559+
SortedDict({'b': 2, 'c': 3})
560+
>>> del view[-1]
561+
>>> sd
562+
SortedDict({'b': 2})
563+
>>> del view[:]
564+
>>> sd
565+
SortedDict({})
566+
567+
:param index: integer or slice for indexing
568+
:raises IndexError: if index out of range
569+
570+
"""
571+
_mapping = self._mapping
572+
_list = _mapping._list
573+
_dict_delitem = _mapping._dict_delitem
574+
if isinstance(index, slice):
575+
keys = _list[index]
576+
del _list[index]
577+
for key in keys:
578+
_dict_delitem(key)
579+
else:
580+
key = _list.pop(index)
581+
_dict_delitem(key)
582+
583+
546584
class SortedKeysView(KeysView, Sequence):
547585
"""Sorted keys view is a dynamic view of the sorted dict's keys.
548586
@@ -584,6 +622,9 @@ def __getitem__(self, index):
584622
return self._mapping._list[index]
585623

586624

625+
__delitem__ = _view_delitem
626+
627+
587628
class SortedItemsView(ItemsView, Sequence):
588629
"""Sorted items view is a dynamic view of the sorted dict's items.
589630
@@ -633,6 +674,9 @@ def __getitem__(self, index):
633674
return key, _mapping[key]
634675

635676

677+
__delitem__ = _view_delitem
678+
679+
636680
class SortedValuesView(ValuesView, Sequence):
637681
"""Sorted values view is a dynamic view of the sorted dict's values.
638682
@@ -680,3 +724,6 @@ def __getitem__(self, index):
680724

681725
key = _mapping_list[index]
682726
return _mapping[key]
727+
728+
729+
__delitem__ = _view_delitem

0 commit comments

Comments
 (0)