Mercurial > repos > devteam > subtract
comparison utils/odict.py @ 0:63926e5abb30
Imported from capsule None
author | devteam |
---|---|
date | Tue, 01 Apr 2014 09:13:11 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:63926e5abb30 |
---|---|
1 """ | |
2 Ordered dictionary implementation. | |
3 """ | |
4 | |
5 from UserDict import UserDict | |
6 | |
7 class odict(UserDict): | |
8 """ | |
9 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/107747 | |
10 | |
11 This dictionary class extends UserDict to record the order in which items are | |
12 added. Calling keys(), values(), items(), etc. will return results in this | |
13 order. | |
14 """ | |
15 def __init__( self, dict = None ): | |
16 self._keys = [] | |
17 UserDict.__init__( self, dict ) | |
18 | |
19 def __delitem__( self, key ): | |
20 UserDict.__delitem__( self, key ) | |
21 self._keys.remove( key ) | |
22 | |
23 def __setitem__( self, key, item ): | |
24 UserDict.__setitem__( self, key, item ) | |
25 if key not in self._keys: | |
26 self._keys.append( key ) | |
27 | |
28 def clear( self ): | |
29 UserDict.clear( self ) | |
30 self._keys = [] | |
31 | |
32 def copy(self): | |
33 new = odict() | |
34 new.update( self ) | |
35 return new | |
36 | |
37 def items( self ): | |
38 return zip( self._keys, self.values() ) | |
39 | |
40 def keys( self ): | |
41 return self._keys[:] | |
42 | |
43 def popitem( self ): | |
44 try: | |
45 key = self._keys[-1] | |
46 except IndexError: | |
47 raise KeyError( 'dictionary is empty' ) | |
48 val = self[ key ] | |
49 del self[ key ] | |
50 return ( key, val ) | |
51 | |
52 def setdefault( self, key, failobj=None ): | |
53 if key not in self._keys: | |
54 self._keys.append( key ) | |
55 return UserDict.setdefault( self, key, failobj ) | |
56 | |
57 def update( self, dict ): | |
58 for ( key, val ) in dict.items(): | |
59 self.__setitem__( key, val ) | |
60 | |
61 def values( self ): | |
62 return map( self.get, self._keys ) | |
63 | |
64 def iterkeys( self ): | |
65 return iter( self._keys ) | |
66 | |
67 def itervalues( self ): | |
68 for key in self._keys: | |
69 yield self.get( key ) | |
70 | |
71 def iteritems( self ): | |
72 for key in self._keys: | |
73 yield key, self.get( key ) | |
74 | |
75 def __iter__( self ): | |
76 for key in self._keys: | |
77 yield key | |
78 | |
79 def reverse( self ): | |
80 self._keys.reverse() | |
81 | |
82 def insert( self, index, key, item ): | |
83 if key not in self._keys: | |
84 self._keys.insert( index, key ) | |
85 UserDict.__setitem__( self, key, item ) |