Package gmisclib :: Module g_keyed_accum
[frames] | no frames]

Source Code for Module gmisclib.g_keyed_accum

 1  from __future__ import division 
2 3 4 -class _keyed_thing:
5 - def __init__(self):
6 self._s = {}
7
8 - def keys(self):
9 return self._s.keys()
10
11 - def values(self):
12 return [ self._out(v) for v in self._s.itervalues() ]
13
14 - def iterkeys(self):
15 return self._s.iterkeys()
16
17 - def items(self):
18 return [ (k, self._out(v)) for (k, v) in self._s.iteritems() ]
19
20 - def get(self, key):
21 return self._out( self._s[key] )
22
23 - def __contains__(self, key):
24 return key in self._s
25
26 - def clear(self):
27 return self._s.clear()
28
29 - def has_key(self):
30 return self._s.has_key()
31
32 - def __iter__(self):
33 return self._s.iterkeys()
34
35 - def __len__(self):
36 return len(self._s)
37
38 - def __delitem__(self, k):
39 del self._s[k]
40
41 42 43 -class keyed_avg(_keyed_thing):
44 - def __init__(self):
45 _keyed_thing.__init__(self)
46
47 - def add(self, key, value):
48 try: 49 s, n = self._s[key] 50 except KeyError: 51 s = 0.0 52 n = 0 53 self._s[key] = (s+value, n+1)
54 55 @staticmethod
56 - def _out(stored):
57 s, n = stored 58 return s/n
59
60 61 -def test():
62 x = keyed_avg() 63 x.add('a', 1) 64 x.add('a', 2) 65 x.add('b', 2) 66 print x.get('a') 67 print x.keys() 68 print x.values()
69 70 if __name__ == '__main__': 71 test() 72