hash_defaultdict

ソースコード

from titan_pylib.data_structures.safe_hash.hash_defaultdict import HashDefaultdict

view on github

展開済みコード

 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})"

仕様

class HashDefaultdict(missing)[source]

Bases: object

items()[source]
keys()[source]
values()[source]