如何修改Python的“default”字典,使其始终返回默认值

2024-06-03 01:10:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我用它们来打印一个包中分配的IANA值的名称。所以所有的字典都有相同的默认值“RESERVED”。

我不想使用d.get(key,default),而是通过d[key]访问字典,这样,如果键不在d中,它将返回默认值(这对所有字典都一样)。

我不一定要用字典,但它们是直觉的选择。。。 还有,一本字典,我可以在那里做这个

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

将是首选解决方案

元组可能是另一种选择,但是我很容易在赋值时出现偏移错误。。。(我的代码不会是“人类可读的”)

哦,是的,Python 2.4


Tags: key名称defaultget字典foo错误bar
3条回答

如果可以,请使用Mario's solution

如果你不能,你只需要给一个类似字典的对象子类。现在,您可以直接从“dict”继承它,它将是快速和高效的。对于不能从“dict”继承的旧Python版本,有一个纯Python字典实现“UserDict”。

有了它,你会这样做:

#!/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”比“dict”慢。

您可以使用以下类(在Python2.7中测试) 只需将0更改为您喜欢的任何默认值。

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)

如果您可以迁移到Python2.5,那么会有defaultdict类,如here。您可以传递给它一个初始值设定项,它返回您想要的内容。否则,恐怕你得自己动手了。

相关问题 更多 >