有序的Dict数据结构

上一篇 / 下一篇  2015-07-27 11:13:37 / 个人分类:Python学习

需要实现如下需求:有序的dict

 

由于dict是无序的,我们需要考虑将无序的key进行有序化。在python数据结构中,有序的结构有listtuple,但是tuple不允许修改数据顺序,而我们没有这样的数据需求,所以我们选择dict结合list来实现一个有序的dict,我们称之为fixdict。具体实现如下所示:

1、  fixdict定义一个属性_keys,且_keyslist结构。

2、  fixdict新增key-value数据, _keys列表新增元素——定义元素的位置i和值,值为对应的key值。

3、  fixdict删除key-value数据,_keys列表删除对应的元素,元素值等于key

4、  获取fixdictkey-value,通过_keys取对应的key值,再通过keyvalue值,最终得到有序的字典数据

    fixdict的具体实现如下

class fixdict(dict):

   """

   字典的Key顺序将按照初始化的顺序排列,用于保存操作码的顺序

   """

   def __init__(self):

      dict.__init__(self)

      self._keys = []

  

   def __setitem__(self, i, v):

      dict.__setitem__(self, i, v)

      if i not in self._keys:

         self._keys.append(i)

  

   def keys(self):

      return self._keys

  

   def items(self):

      return [(k, self[k]) for k in self._keys]

  

   def values(self):

      return [self[k] for k in self._keys]

  

   def update(self, dc):

      for k, v in dc.items():

         self[k] = v

        

   def pop(self, key):

      dict.pop(self, key)

      self._keys.remove(key)

     

   def insert(self, i, k, v):

      dict.__setitem__(self, k, v)

      if k not in self._keys:

         self._keys.insert(i, k)


TAG: Python

 

评分:0

我来说两句

Open Toolbar