from weak_list import WeakList from collections import defaultdict class StringWrapper: def __init__(self, s): self.s = s class OrderedMultiIndexMapWeakRef: def __init__(self): self.data = [] self.index_list = WeakList() def insert(self, text, title): self.data.append(text) self.index_list.append(StringWrapper(title)) def get(self, key): if key: return [self.data[i][1] for i in self.index_map[key]] else: return [self.data[i][1] for i in self.keyless_values] def all_titles(self): return self.index_list def all_texts(self): return self.data