orderdict.py

来自「linux下基于c++的处理器仿真平台。具有处理器流水线」· Python 代码 · 共 82 行

PY
82
字号
# Copyright (c) 2005# The Regents of The University of Michigan# All Rights Reserved## This code is part of the M5 simulator, developed by Nathan Binkert,# Erik Hallnor, Steve Raasch, and Steve Reinhardt, with contributions# from Ron Dreslinski, Dave Greene, Lisa Hsu, Kevin Lim, Ali Saidi,# and Andrew Schultz.## Permission is granted to use, copy, create derivative works and# redistribute this software and such derivative works for any# purpose, so long as the copyright notice above, this grant of# permission, and the disclaimer below appear in all copies made; and# so long as the name of The University of Michigan is not used in any# advertising or publicity pertaining to the use or distribution of# this software without specific, written prior authorization.## THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE# UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY PURPOSE, AND# WITHOUT WARRANTY BY THE UNIVERSITY OF MICHIGAN OF ANY KIND, EITHER# EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR# PURPOSE. THE REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE# LIABLE FOR ANY DAMAGES, INCLUDING DIRECT, SPECIAL, INDIRECT,# INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM# ARISING OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN# IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF SUCH# DAMAGES.__all__ = [ 'orderdict' ]class orderdict(dict):    def __init__(self, d = {}):        self._keys = d.keys()        super(orderdict, self).__init__(d)    def __setitem__(self, key, item):        super(orderdict, self).__setitem__(key, item)        if not hasattr(self, '_keys'):            self._keys = [key,]        if key not in self._keys:            self._keys.append(key)    def __delitem__(self, key):        super(orderdict, self).__delitem__(key)        self._keys.remove(key)    def clear(self):        super(orderdict, self).clear()        self._keys = []    def items(self):        for i in self._keys:            yield i, self[i]    def keys(self):        return self._keys    def popitem(self):        if len(self._keys) == 0:            raise KeyError('dictionary is empty')        else:            key = self._keys[-1]            val = self[key]            del self[key]            return key, val    def setdefault(self, key, failobj = None):        super(orderdict, self).setdefault(key, failobj)        if key not in self._keys:            self._keys.append(key)    def update(self, d):        for key in d.keys():            if not self.has_key(key):                self._keys.append(key)        super(orderdict, self).update(d)    def values(self):        for i in self._keys:            yield self[i]

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?