K.I.S.S. – 简单哲学 Linux, Freedom, Arch, Python, Gtk+, C … Keep It Simple, Stupid!

8五/102

简单实现 Python 有序字典(Ordered Dict)

的 Dict 类型很好用,不过有一点可惜就是它的 keys() 是乱序的,想要用它来保存有序的 key-value 对(比如配置文件)就比较困难,碰巧我的毕设就要用到这样一个类型来存放配置文件,怎么办呢?
搜索了一下,Python 2.7 / 3.1 才有 Ordered Dict 的支持,我总不能去 Python 源码里面拽吧……
还有些方法比较陈旧,继承自 UserDict,不支持 iter*() 系列方法,虽然不碍事,不过心里还是不舒服。
不过找来找去,还是让我找到了相对比较简洁,功能有符合要求的代码,见下:

from UserDict import DictMixin

class odict(DictMixin):

    def __init__(self):
        self._keys = []
        self._data = {}

    def __setitem__(self, key, value):
        if key not in self._data:
            self._keys.append(key)
        self._data[key] = value

    def __getitem__(self, key):
        return self._data[key]

    def __delitem__(self, key):
        del self._data[key]
        self._keys.remove(key)

    def keys(self):
        return list(self._keys)

    def copy(self):
        copyDict = odict()
        copyDict._data = self._data.copy()
        copyDict._keys = self._keys[:]
        return copyDict

代码来自 ActiveState ,PSF 许可。

原创文章,转载请注明: 转载自K.I.S.S. - 简单哲学

本文链接地址: 简单实现 Python 有序字典(Ordered Dict)

分享家:Addthis中国

你可能对这些感兴趣:

  1. Python – 你可能不知道的
  2. 那些在 Python 3 中闪亮的
  3. Python 版 Linux 下的迅雷
  4. 人生苦短,我用 Genie
  5. 使用 dbus-python 建立单实例进程

喜欢这个文章吗?

考虑订阅我们的RSS Feed吧!