|
68 | 68 | You can also retrieve all entries that are prefixes for or prefixed by |
69 | 69 | a given key: |
70 | 70 |
|
71 | | -- `trie.prefixed_by(key)` returns a set of `TrieEntry` objects that |
| 71 | +- `trie.prefixed_by(key)` returns an Iterator of `TrieEntry` objects that |
72 | 72 | are prefixed_by of the given key. |
73 | | -- `trie.prefixes(key)` returns a set of `TrieEntry` objects that |
| 73 | +- `trie.prefixes(key)` returns an Iterator of `TrieEntry` objects that |
74 | 74 | are prefixes of the given key. |
75 | 75 |
|
76 | 76 | These methods are useful for searching and retrieving entries |
|
81 | 81 | trie = GeneralizedTrie() |
82 | 82 |
|
83 | 83 | # Adding entries using the trie[key] = value syntax |
84 | | -entries: list[tuple[str, str | list[str]]] = [ |
| 84 | +entries = [ |
85 | 85 | ('abcdef', 'value1'), |
86 | 86 | ('abc', 'value2'), |
87 | 87 | ('abcd', 'value3'), |
88 | 88 | ('qrf', 'value4'), |
89 | 89 | ('xyz', ['lists', 'are', 'also', 'supported']), |
90 | 90 | ('xy', 'value6'), |
91 | 91 | ] |
| 92 | + |
92 | 93 | for key, value in entries: |
93 | 94 | trie[key] = value |
94 | 95 |
|
95 | | -prefixed_by: set[TrieEntry] = set(trie.prefixed_by('xy')) |
| 96 | +prefixed_by: list[TrieEntry] = list(trie.prefixed_by('xy')) |
96 | 97 | print(f'prefixed_by = {prefixed_by}') |
97 | 98 |
|
98 | | -prefixes: set[TrieEntry] = set(trie.prefixes('abcdefg')) |
| 99 | +prefixes: list[TrieEntry] = list(trie.prefixes('abcdefg')) |
99 | 100 | print(f'prefixes = {prefixes}') |
100 | 101 |
|
101 | 102 | # prefixed_by = { |
|
111 | 112 |
|
112 | 113 | # Adding using the add method |
113 | 114 | # This will throw an error if the key already exists. |
114 | | -more_entries: list[tuple[str | tuple[int, ...], str]] = [ |
| 115 | +more_entries = [ |
115 | 116 | ((128, 96, 160, 0), 'value5'), |
116 | 117 | ((128, 90), 'value5b'), |
117 | 118 | ('xy', 'value6'), |
118 | 119 | ] |
119 | | -for key, value in more_entries: |
| 120 | +for different_key, different_value in more_entries: |
120 | 121 | try: |
121 | | - trie.add(key, value) |
122 | | - print(f'Added entry: {key} -> {value}') |
| 122 | + trie.add(different_key, different_value) |
| 123 | + print(f'Added entry: {different_key} -> {different_value}') |
123 | 124 | except DuplicateKeyError: |
124 | | - print(f'DuplicateKeyError - entry already exists: {key}') |
| 125 | + print(f'DuplicateKeyError - entry already exists: {different_key}') |
125 | 126 |
|
126 | | -prefixed_by: set[TrieEntry] = set(trie.prefixed_by([128])) |
| 127 | +prefixed_by = list(trie.prefixed_by([128])) |
127 | 128 | print(f'prefixed_by = {prefixed_by}') |
128 | 129 |
|
129 | | -prefixes: set[TrieEntry] = set(trie.prefixes([128, 90])) |
| 130 | +prefixes = list(trie.prefixes([128, 90])) |
130 | 131 | print(f'prefixes = {prefixes}') |
131 | 132 |
|
132 | 133 | # prefixed_by = { |
|
149 | 150 | for key, value in even_more_entries: |
150 | 151 | trie.update(key, value) |
151 | 152 |
|
152 | | -prefixed_by = set(trie.prefixed_by('abcd')) |
| 153 | +prefixed_by = list(trie.prefixed_by('abcd')) |
153 | 154 | print(f'prefixed_by = {prefixed_by}') |
154 | 155 |
|
155 | | -prefixes = set(trie.prefixes('abcdefg')) |
| 156 | +prefixes = list(trie.prefixes('abcdefg')) |
156 | 157 | print(f'prefixes = {prefixes}') |
157 | 158 |
|
158 | | -# prefixed_by = { |
159 | | -# TrieEntry(ident=3, key='abcd', value='value8'), |
160 | | -# TrieEntry(ident=9, key='abcdefghi', value='value7'), |
161 | | -# TrieEntry(ident=1, key='abcdef', value='value1') |
162 | | -# } |
163 | | -# |
164 | | -# prefixes = { |
165 | | -# TrieEntry(ident=2, key='abc', value='value2'), |
166 | | -# TrieEntry(ident=3, key='abcd', value='value8'), |
167 | | -# TrieEntry(ident=1, key='abcdef', value='value1') |
168 | | -# } |
| 159 | +# prefixed_by = [TrieEntry(ident=TrieId(6), key='xy', value='value6'), |
| 160 | +# TrieEntry(ident=TrieId(5), key='xyz', value=['lists', 'are', 'also', 'supported'])] |
| 161 | +# prefixes = [TrieEntry(ident=TrieId(2), key='abc', value='value2'), |
| 162 | +# TrieEntry(ident=TrieId(3), key='abcd', value='value3'), |
| 163 | +# TrieEntry(ident=TrieId(1), key='abcdef', value='value1')] |
| 164 | +# Added entry: (128, 96, 160, 0) -> value5 |
| 165 | +# Added entry: (128, 90) -> value5b |
| 166 | +# DuplicateKeyError - entry already exists: xy |
| 167 | +# prefixed_by = [TrieEntry(ident=TrieId(8), key=(128, 90), value='value5b'), |
| 168 | +# TrieEntry(ident=TrieId(7), key=(128, 96, 160, 0), value='value5')] |
| 169 | +# prefixes = [TrieEntry(ident=TrieId(8), key=(128, 90), value='value5b')] |
| 170 | +# prefixed_by = [TrieEntry(ident=TrieId(3), key='abcd', value='value8'), |
| 171 | +# TrieEntry(ident=TrieId(1), key='abcdef', value='value1'), |
| 172 | +# TrieEntry(ident=TrieId(9), key='abcdefghi', value='value7')] |
| 173 | +# prefixes = [TrieEntry(ident=TrieId(2), key='abc', value='value2'), |
| 174 | +# TrieEntry(ident=TrieId(3), key='abcd', value='value8'), |
| 175 | +# TrieEntry(ident=TrieId(1), key='abcdef', value='value1')] |
0 commit comments