Source code for titan_pylib.data_structures.safe_hash.hash_defaultdict

 1from collections import defaultdict
 2from random import Random
 3from typing import Final
 4
 5
[docs] 6class HashDefaultdict: 7 8 _r = Random() 9 _xor: Final[int] = _r.randrange(10000000, 1000000000) 10 11 def __init__(self, missing): 12 self._data = defaultdict(missing) 13 14 def __iter__(self): 15 for k, v in self.items(): 16 yield k, v 17 18 def __setitem__(self, key: int, value): 19 self._data[key ^ self._xor] = value 20 21 def __getitem__(self, key: int): 22 return self._data[key ^ self._xor] 23 24 def __delitem__(self, key: int): 25 del self._data[key ^ self._xor] 26 27 def __contains__(self, item): 28 return item ^ self._xor in self._data 29 30 def __len__(self): 31 return len(self._data) 32
[docs] 33 def keys(self): 34 return (k ^ self._xor for k in self._data.keys())
35
[docs] 36 def values(self): 37 return (v for v in self._data.values())
38
[docs] 39 def items(self): 40 return ((k ^ self._xor, v) for k, v in self._data.items())
41 42 def __str__(self): 43 return ( 44 f"{self.__class__.__name__}(" 45 + "{" 46 + ", ".join(f"{k}: {v}" for k, v in self.items()) 47 + "})" 48 ) 49 50 def __repr__(self): 51 return f"{self.__class__.__name__}({self})"