@@ -161,7 +161,7 @@ def __eq__(self, other: Any) -> bool:
161161 return list_eq and self ._dict == other ._dict
162162 return list_eq
163163
164- def copy (self ) -> Self :
164+ def copy (self ) -> "_ListMap" :
165165 new_listmap = _ListMap (self )
166166 new_listmap ._dict = self ._dict .copy ()
167167 return new_listmap
@@ -184,7 +184,7 @@ def pop(self, key: str, default: _PT, /) -> Union[_T, _PT]: ...
184184
185185 def pop (self , key = - 1 , default = None ):
186186 if isinstance (key , int ):
187- ret = list .pop (self , key )
187+ ret = super () .pop (key )
188188 for str_key , idx in list (self ._dict .items ()):
189189 if idx == key :
190190 self ._dict .pop (str_key )
@@ -201,7 +201,7 @@ def insert(self, index: SupportsIndex, __object: _T) -> None:
201201 for key , idx in self ._dict .items ():
202202 if idx >= index :
203203 self ._dict [key ] = idx + 1
204- list .insert (self , index , __object )
204+ super () .insert (index , __object )
205205
206206 def remove (self , __object : _T ) -> None :
207207 idx = self .index (__object )
@@ -213,7 +213,7 @@ def remove(self, __object: _T) -> None:
213213 self ._dict [key ] = val - 1
214214 if name :
215215 self ._dict .pop (name , None )
216- list .remove (self , __object )
216+ super () .remove (__object )
217217
218218 def sort (
219219 self ,
@@ -227,7 +227,7 @@ def sort(
227227 item = self [idx ]
228228 item_to_names .setdefault (item , []).append (name )
229229 # Sort the list
230- list .sort (self , key = key , reverse = reverse )
230+ super () .sort (key = key , reverse = reverse )
231231 # Update _dict with new indices
232232 new_dict = {}
233233 for idx , item in enumerate (self ):
@@ -270,11 +270,11 @@ def __setitem__(self, key: slice, value: Iterable[_T], /) -> None: ...
270270 def __setitem__ (self , key , value , / ) -> None :
271271 if isinstance (key , (int , slice )):
272272 # replace element by index
273- return list .__setitem__ (self , key , value )
273+ return super () .__setitem__ (key , value )
274274 if isinstance (key , str ):
275275 # replace or insert by name
276276 if key in self ._dict :
277- list .__setitem__ (self , self ._dict [key ], value )
277+ super () .__setitem__ (self ._dict [key ], value )
278278 else :
279279 self .append (value )
280280 self ._dict [key ] = len (self ) - 1
@@ -284,24 +284,25 @@ def __setitem__(self, key, value, /) -> None:
284284 def __contains__ (self , item : Union [object , str ]) -> bool :
285285 if isinstance (item , str ):
286286 return item in self ._dict
287- return list .__contains__ (self , item )
287+ return super () .__contains__ (item )
288288
289289 # --- Dict-like interface ---
290290
291291 def __delitem__ (self , key : Union [SupportsIndex , slice , str ]) -> None :
292+ if isinstance (key , str ):
293+ if key not in self ._dict :
294+ raise KeyError (f"Key '{ key } ' not found." )
295+ key : int = self ._dict [key ]
296+
292297 if isinstance (key , (int , slice )):
293- list .__delitem__ (self , key )
298+ super () .__delitem__ (key )
294299 for _key in key .indices (len (self )) if isinstance (key , slice ) else [key ]:
295300 # update indices in the dict
296301 for str_key , idx in list (self ._dict .items ()):
297302 if idx == _key :
298303 self ._dict .pop (str_key )
299304 elif idx > _key :
300305 self ._dict [str_key ] = idx - 1
301- elif isinstance (key , str ):
302- if key not in self ._dict :
303- raise KeyError (f"Key '{ key } ' not found." )
304- self .__delitem__ (self ._dict [key ])
305306 else :
306307 raise TypeError ("Key must be int or str" )
307308
0 commit comments