diff options
author | Raymond Hettinger <python@rcn.com> | 2010-09-06 21:26:09 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2010-09-06 21:26:09 (GMT) |
commit | f45abc97bfad3bc9737a8a8d95c1f4a60cd6f478 (patch) | |
tree | 7b24d9113c1d79480cde1daae9ed58199bc0e007 /Lib/collections.py | |
parent | 7b2a7710ef17e38e021f6f045b8cd7ad0e96d5e1 (diff) | |
download | cpython-f45abc97bfad3bc9737a8a8d95c1f4a60cd6f478.zip cpython-f45abc97bfad3bc9737a8a8d95c1f4a60cd6f478.tar.gz cpython-f45abc97bfad3bc9737a8a8d95c1f4a60cd6f478.tar.bz2 |
Add method to OrderedDict for repositioning keys to the ends.
Diffstat (limited to 'Lib/collections.py')
-rw-r--r-- | Lib/collections.py | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/Lib/collections.py b/Lib/collections.py index c3c51d1..00886ef 100644 --- a/Lib/collections.py +++ b/Lib/collections.py @@ -173,18 +173,29 @@ class OrderedDict(dict, MutableMapping): def __del__(self): self.clear() # eliminate cyclical references - def _renew(self, key, PREV=0, NEXT=1): - 'Fast version of self[key]=self.pop(key). Private method for internal use.' + def move_to_end(self, key, last=True, PREV=0, NEXT=1): + '''Move an existing element to the end (or beginning if last==False). + + Raises KeyError if the element does not exist. + When last=True, acts like a fast version of self[key]=self.pop(key). + + ''' link = self.__map[key] link_prev = link[PREV] link_next = link[NEXT] link_prev[NEXT] = link_next link_next[PREV] = link_prev root = self.__root - last = root[PREV] - link[PREV] = last - link[NEXT] = root - last[NEXT] = root[PREV] = link + if last: + last = root[PREV] + link[PREV] = last + link[NEXT] = root + last[NEXT] = root[PREV] = link + else: + first = root[NEXT] + link[PREV] = root + link[NEXT] = first + root[NEXT] = first[PREV] = link ################################################################################ |