Aestate
ordered_dict.py
Go to the documentation of this file.
1 """Drop-in replacement for collections.OrderedDict by Raymond Hettinger
2 
3 http://code.activestate.com/recipes/576693/
4 
5 """
6 from UserDict import DictMixin
7 
8 
9 class OrderedDict(dict, DictMixin):
10 
11  def __init__(self, *args, **kwds):
12  if len(args) > 1:
13  raise TypeError('expected at most 1 arguments, got %d' % len(args))
14  try:
15  self.__end
16  except AttributeError:
17  self.clear()
18  self.update(*args, **kwds)
19 
20  def clear(self):
21  self.__end = end = []
22  end += [None, end, end] # sentinel node for doubly linked list
23  self.__map = {} # key --> [key, prev, next]
24  dict.clear(self)
25 
26  def __setitem__(self, key, value):
27  if key not in self:
28  end = self.__end
29  curr = end[1]
30  curr[2] = end[1] = self.__map[key] = [key, curr, end]
31  dict.__setitem__(self, key, value)
32 
33  def __delitem__(self, key):
34  dict.__delitem__(self, key)
35  key, prev, next = self.__map.pop(key)
36  prev[2] = next
37  next[1] = prev
38 
39  def __iter__(self):
40  end = self.__end
41  curr = end[2]
42  while curr is not end:
43  yield curr[0]
44  curr = curr[2]
45 
46  def __reversed__(self):
47  end = self.__end
48  curr = end[1]
49  while curr is not end:
50  yield curr[0]
51  curr = curr[1]
52 
53  def popitem(self, last=True):
54  if not self:
55  raise KeyError('dictionary is empty')
56  key = reversed(self).next() if last else iter(self).next()
57  value = self.pop(key)
58  return key, value
59 
60  def __reduce__(self):
61  items = [[k, self[k]] for k in self]
62  tmp = self.__map, self.__end
63  del self.__map, self.__end
64  inst_dict = vars(self).copy()
65  self.__map, self.__end = tmp
66  if inst_dict:
67  return (self.__class__, (items,), inst_dict)
68  return self.__class__, (items,)
69 
70  def keys(self):
71  return list(self)
72 
73  setdefault = DictMixin.setdefault
74  update = DictMixin.update
75  pop = DictMixin.pop
76  values = DictMixin.values
77  items = DictMixin.items
78  iterkeys = DictMixin.iterkeys
79  itervalues = DictMixin.itervalues
80  iteritems = DictMixin.iteritems
81 
82  def __repr__(self):
83  if not self:
84  return '%s()' % (self.__class__.__name__,)
85  return '%s(%r)' % (self.__class__.__name__, self.items())
86 
87  def copy(self):
88  return self.__class__(self)
89 
90  @classmethod
91  def fromkeys(cls, iterable, value=None):
92  d = cls()
93  for key in iterable:
94  d[key] = value
95  return d
96 
97  def __eq__(self, other):
98  if isinstance(other, OrderedDict):
99  return len(self) == len(other) and \
100  all(p == q for p, q in zip(self.items(), other.items()))
101  return dict.__eq__(self, other)
102 
103  def __ne__(self, other):
104  return not self == other
aestate.ajson.sim.ordered_dict.OrderedDict.__repr__
def __repr__(self)
Definition: ordered_dict.py:82
aestate.ajson.sim.ordered_dict.OrderedDict.__map
__map
Definition: ordered_dict.py:23
aestate.ajson.sim.ordered_dict.OrderedDict.__setitem__
def __setitem__(self, key, value)
Definition: ordered_dict.py:26
aestate.ajson.sim.ordered_dict.OrderedDict.fromkeys
def fromkeys(cls, iterable, value=None)
Definition: ordered_dict.py:91
aestate.ajson.sim.ordered_dict.OrderedDict
Definition: ordered_dict.py:9
aestate.ajson.sim.ordered_dict.OrderedDict.update
update
Definition: ordered_dict.py:74
aestate.ajson.sim.ordered_dict.OrderedDict.popitem
def popitem(self, last=True)
Definition: ordered_dict.py:53
aestate.ajson.sim.ordered_dict.OrderedDict.pop
pop
Definition: ordered_dict.py:75
aestate.ajson.sim.ordered_dict.OrderedDict.__end
__end
Definition: ordered_dict.py:21
aestate.ajson.sim.ordered_dict.OrderedDict.__reversed__
def __reversed__(self)
Definition: ordered_dict.py:46
aestate.ajson.sim.ordered_dict.OrderedDict.__init__
def __init__(self, *args, **kwds)
Definition: ordered_dict.py:11
aestate.ajson.sim.ordered_dict.OrderedDict.clear
def clear(self)
Definition: ordered_dict.py:20
aestate.ajson.sim.ordered_dict.OrderedDict.__iter__
def __iter__(self)
Definition: ordered_dict.py:39
aestate.ajson.sim.ordered_dict.OrderedDict.__ne__
def __ne__(self, other)
Definition: ordered_dict.py:103
aestate.ajson.sim.ordered_dict.OrderedDict.__reduce__
def __reduce__(self)
Definition: ordered_dict.py:60
aestate.ajson.sim.ordered_dict.OrderedDict.keys
def keys(self)
Definition: ordered_dict.py:70
aestate.ajson.sim.ordered_dict.OrderedDict.__delitem__
def __delitem__(self, key)
Definition: ordered_dict.py:33
aestate.ajson.sim.ordered_dict.OrderedDict.copy
def copy(self)
Definition: ordered_dict.py:87
aestate.ajson.sim.ordered_dict.OrderedDict.__eq__
def __eq__(self, other)
Definition: ordered_dict.py:97
aestate.ajson.sim.ordered_dict.OrderedDict.items
items
Definition: ordered_dict.py:77