devve1 commited on
Commit
0ad6e3a
1 Parent(s): 7d4a87a

Create ordered_multimap.py

Browse files
Files changed (1) hide show
  1. ordered_multimap.py +30 -0
ordered_multimap.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from collections import defaultdict
2
+
3
+ class OrderedMultimap:
4
+ def __init__(self):
5
+ self.data = []
6
+ self.index_map = defaultdict(list)
7
+ self.keyless_values = []
8
+
9
+ def insert(self, key, value):
10
+ if key:
11
+ self.index_map[key].append(len(self.data))
12
+ else:
13
+ self.keyless_values.append(len(self.data))
14
+ self.data.append((key, value))
15
+
16
+ def get(self, key):
17
+ if key:
18
+ return [self.data[i][1] for i in self.index_map[key]]
19
+ else:
20
+ return [self.data[i][1] for i in self.keyless_values]
21
+
22
+ def items(self):
23
+ from collections import defaultdict
24
+ result = defaultdict(list)
25
+ for key, value in self.data:
26
+ result[key].append(value)
27
+ return result.items()
28
+
29
+ def all_items(self):
30
+ return self.data