我正在使用它们来打印数据包中指定的IANA值的名称。因此,所有字典都具有相同的默认值“RESERVED”。
我不想使用d.get(key,default)
,而是通过d[key]
访问词典,这样如果键不在d中,它将返回默认值(对所有词典都相同)。
我不一定需要使用字典,但它们是直观的选择...... 还有,我可以做的一本字典
d = {
1..16 = "RESERVED",
17 : "Foo",
18 : "Bar,
19..255: "INVALID"
}
将是首选解决方案
元组可能是另一种选择,但是我很容易抵消分配值的错误......(而且我的代码不会是“人类可读的”)
哦,是的,Python 2.4
答案 0 :(得分:9)
如果您可以迁移到Python 2.5,则会显示 defaultdict 类,如here所示。您可以传递一个初始化程序,返回您想要的内容。否则,我担心你必须推出自己的实现。
答案 1 :(得分:4)
如果可以,请使用Mario's solution。
如果你不能,你只需要子类化类似字典的对象。现在,您可以通过直接从“dict”继承来实现,它将是快速有效的。对于旧的Python版本,你不能从“dict”继承,有“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”比“dict”慢。
答案 2 :(得分:0)
您可以使用以下类(在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)