from weak_list import WeakList from collections import defaultdict class OrderedMultiIndexMapWeakRef: def __init__(self): self.data = [] self.index_list = WeakList() def insert(self, text, title): self.data.append(text) self.index_list.append(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 items(self): result = defaultdict(list) for key, value in self.data: result[key].append(value) return result.items() def all_texts(self): return self.data