Coverage for src/extratools_core/dicttools.py: 0%
18 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-04 05:56 -0700
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-04 05:56 -0700
1from collections import defaultdict
2from collections.abc import Iterable, Mapping, Sequence
5def invert[KT, VT](d: Mapping[KT, VT]) -> Mapping[VT, KT]:
6 return {
7 v: k
8 for k, v in d.items()
9 }
12def invert_safe[KT, VT](d: Mapping[KT, VT]) -> Mapping[VT, Sequence[KT]]:
13 r: defaultdict[VT, list[KT]] = defaultdict(list)
15 for k, v in d.items():
16 r[v].append(k)
18 return r
21def inverted_index[T](
22 seqs: Iterable[Sequence[T]],
23) -> Mapping[T, Sequence[tuple[int, Sequence[int]]]]:
24 index: defaultdict[T, list[tuple[int, list[int]]]] = defaultdict(list)
26 for i, seq in enumerate(seqs):
27 seq_index: defaultdict[T, list[int]] = defaultdict(list)
28 for j, item in enumerate(seq):
29 seq_index[item].append(j)
31 for item, poss in seq_index.items():
32 index[item].append((i, poss))
34 return index