如何修改Python的“默认”字典,以便它总是返回默认值(How to modify the Pyt

2019-08-31 09:00发布

我使用所有的人都来打印指定的IANA值的名称在一个包。 因此,所有的字典都具有相同的默认值“保留”。

我不想使用d.get(key,default) ,但通过访问字典d[key]因此,如果关键不在d,则返回默认值(即同所有字典)。

我不一定需要使用字典,但他们的直觉选择...此外,一本字典我能做到这一点,其中

d = {
   1..16 = "RESERVED",
   17 : "Foo",
   18 : "Bar,
   19..255: "INVALID"
  }

将是优选的解决方案

元组可能是另一种选择,但后来我容易发生偏移误差分配值...(和我的代码不会是“人类可读”)

噢,Python 2.4中

Answer 1:

如果可以,使用马里奥的解决方案 。

如果你不能,你只需要一个子类类字典对象。 现在,你可以做到这一点通过直接从“字典”继承,这将是快速,高效。 对于老版本的Python,与你不能从“字典”继承,有“UserDict中”,一个纯粹的Python字典实现。

有了它,你会做这种方式:

#!/usr/bin/env python
# -*- coding= UTF-8 -*-

import UserDict

class DefaultDict(UserDict.UserDict) :

    default_value = 'RESERVED'

    def __getitem__(self, key) :
        return self.data.get(key, DefaultDict.default_value)


d = DefaultDict()
d["yes"] = True;
print d["yes"]
print d["no"]

请记住,“UserDict中”比“字典”慢。



Answer 2:

如果你可以迁移到Python 2.5,有defaultdict类,如这里 。 你可以通过它的初始化,返回你想要的。 否则,你将不得不推出自己实现它,我害怕。



Answer 3:

您可以使用下面的类(在Python 2.7测试)只要改变零到任何你喜欢的默认值。

class cDefaultDict(dict):
    # dictionary that returns zero for missing keys
    # keys with zero values are not stored

    def __missing__(self,key):
        return 0

    def __setitem__(self, key, value):
        if value==0:
            if key in self:  # returns zero anyway, so no need to store it
                del self[key]
        else:
            dict.__setitem__(self, key, value)


文章来源: How to modify the Python 'default' dictionary so that it always returns a default value