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