一尘不染

覆盖{…}表示法,以便获得OrderedDict()而不是dict()?

python

更新:Python 3.7+可确保保留插入顺序的字典

我想使用.py文件,例如配置文件。因此,使用这种{...}表示法,我可以使用字符串作为键来创建字典,但是在标准的python字典中定义顺序会丢失。

我的问题:是否可以重写{...}表示法,以便我得到OrderedDict()而不是dict()

我希望仅使用OrderedDict(dict = OrderedDict)覆盖dict构造函数即可,但事实并非如此。

例如:

dict = OrderedDict
dictname = {
   'B key': 'value1',
   'A key': 'value2',
   'C key': 'value3'
   }

print dictname.items()

输出:

[('B key', 'value1'), ('A key', 'value2'), ('C key', 'value3')]

阅读 137

收藏
2020-12-20

共1个答案

一尘不染

这几乎可以为您提供所需的语法:

class _OrderedDictMaker(object):
    def __getitem__(self, keys):
        if not isinstance(keys, tuple):
            keys = (keys,)
        assert all(isinstance(key, slice) for key in keys)

        return OrderedDict([(k.start, k.stop) for k in keys])

ordereddict = _OrderedDictMaker()



from nastyhacks import ordereddict

menu = ordereddict[
   "about" : "about",
   "login" : "login",
   'signup': "signup"
]

编辑:
有人独立发现了这一点,并odictliteral在PyPI上发布了该软件包,该软件包提供了更为彻底的实现-
改用该软件包

2020-12-20