@@ -543,6 +543,44 @@ def _check(self):
543
543
assert all (key in self for key in _list )
544
544
545
545
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
+
546
584
class SortedKeysView (KeysView , Sequence ):
547
585
"""Sorted keys view is a dynamic view of the sorted dict's keys.
548
586
@@ -584,6 +622,9 @@ def __getitem__(self, index):
584
622
return self ._mapping ._list [index ]
585
623
586
624
625
+ __delitem__ = _view_delitem
626
+
627
+
587
628
class SortedItemsView (ItemsView , Sequence ):
588
629
"""Sorted items view is a dynamic view of the sorted dict's items.
589
630
@@ -633,6 +674,9 @@ def __getitem__(self, index):
633
674
return key , _mapping [key ]
634
675
635
676
677
+ __delitem__ = _view_delitem
678
+
679
+
636
680
class SortedValuesView (ValuesView , Sequence ):
637
681
"""Sorted values view is a dynamic view of the sorted dict's values.
638
682
@@ -680,3 +724,6 @@ def __getitem__(self, index):
680
724
681
725
key = _mapping_list [index ]
682
726
return _mapping [key ]
727
+
728
+
729
+ __delitem__ = _view_delitem
0 commit comments